我需要存储用户的信用卡哈希(指纹(以备将来识别,以便始终轻松显示他们的订单,而无需通过我的支付提供商的卡查找。
我在PHP中需要一个非常短的算法,但sodium_crypto_shorthash
不是抗碰撞的,这让我对此表示怀疑。
$key = 'jNuVurmAili4Otic';
//echo bin2hex(sodium_crypto_generichash('4242424242424242', $key,16));//32 strlen
echo bin2hex(sodium_crypto_shorthash('4242424242424242', $key)); // 16 strlen
是否有任何安全的无冲突PHP 7哈希算法可以在 bin2hex 之后输出最大 12 个长度?
SipHash64 不耐碰撞的原因是其输出尺寸小。任何具有 64 位输出的哈希函数,或者截断为 64 位的哈希都可能在 2^32 条消息经过哈希处理后发生冲突。
您要求返回 12 个十六进制字符的东西,这意味着 6 个字节输出。无论您使用哪种算法,在对 2^24(~1600 万(卡号进行哈希处理后,您都会看到概率很高的碰撞。
它完全可以接受您的应用。