在数据库中存储二进制数据以实现安全性

时间:2016-03-29 09:15:37

标签: php mysql

我正在尝试更多地保护我的在线交易。

我用于在线交易的过程是: 1.用户生成订单 2.用户重定向到银行付款(即paypal) 3.银行(paypal)联系.php页面(Paypal IPN)告诉我订单已经完成。 4.用户订单已经完成。

在我生成的每个事务中,我都会从数据中创建一个sha512字符串。我想将其存储在数据库中,以便在PayPal IPN联系我时告知订单已完成,以验证订单信息。

为了节省数据库空间,我最近阅读了this answer,并认为将字符串存储在二进制列中可能会很好。我的问题是我如何用PHP做到这一点?

所以说我有一个字符串:

A99ACAF1FA7337F451C344C84F6800037F17EABBC32073ECEA6688B4BAD116BDB288B0D24DE7DD5C53E26A0B41242B2D2D065EDFDA5C16B4706CD5DC57226580

在PHP中,如何将其转换为二进制值,以便将其存储在数据库中?它会像上面的字符串一样独特吗?我能想到的最好的是PHP字符串pack,但我不确定如何使用它。或者它是否是使用它的正确方法。通常我会将上面的哈希值存储到VARCHAR(512)中,但我希望保持数据库大小不变,并且512个字符看起来像很多数据。

1 个答案:

答案 0 :(得分:1)

echo hash('sha512', 'hash_string', true);

第三个参数是raw_output:当设置为TRUE时,输出原始二进制数据。 (doc)。由于六角形与二进制值之间存在一对一的对应关系,因此您不会失去"唯一性"。

长度始终为64字节字符串。但是如果你用六边形写哈希,那么它将是128个字符,不是512