0

我需要存储我用户的信用卡哈希(指纹)以供将来识别,以便始终轻松显示他们的订单,而无需通过我的支付提供商的卡查找。

我需要一个非常短的 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 长度?

4

1 回答 1

0

SipHash64 不耐碰撞的原因是它的输出尺寸小。任何具有 64 位输出的散列函数或截断为 64 位的散列都可能在散列 2^32 条消息后发生冲突。

您要求返回 12 个十六进制字符的东西,这意味着 6 个字节的输出。无论你使用什么算法,在你散列 2^24(约 1600 万)个卡号后,你都会看到高概率的冲突。

它完全可以为您的应用程序所接受。

于 2018-06-30T22:43:36.977 回答