使用 libsodium 对信用卡进行哈希处理

hashing credit card with libsodium

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

我在 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

有没有secure collision-free PHP 7 hashing algorithm可以输出maximum of 12 长度 后 bin2hex?

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

您要求的是 returns 12 个十六进制字符,这意味着 6 个字节的输出。无论您使用什么算法,在对 2^24(约 1600 万)个卡号进行哈希处理后,您都会看到很大概率发生冲突。

完全可以接受你的申请。