阅读generating salt using Cryptographically Secure Pseudo-Random Number Generator (CSPRNG)。然后,此salt将附加到需要进行哈希处理的字符串中。
但是,CSPRNG函数生成的盐(对于PHP我使用openssl_random_pseudo_bytes)实际上是二进制数据。
对于如何将这个二进制数据附加到字符串感到困惑,我看到了这个PHP example for creating hash。它编码二进制数据。
所以我只是想知道这是否是我需要做的。我需要编码salt来获取字符串。然后我可以将盐附加到需要哈希的字符串上。或者还有其他方法可以在字符串中添加盐吗?
注意我没有哈希密码
答案 0 :(得分:1)
如果您需要哈希密码,请使用password_hash()
和password_verify()
,并可能添加password_needs_rehash()
- 请参阅http://de2.php.net/password_hash。
您可能会注意到这些函数自PHP 5.5.0起可用 - 如果您使用的是早期版本的PHP,则可以添加this compatibility library以使其适用于从5.3.7开始的PHP。
它不能比那更容易。
答案 1 :(得分:0)
最好先使用编码将字符串转换为二进制数据。对于大多数用例,UTF-8编码可能是最好的。不要忘记(至少)记录使用哪种字符编码。
现在连接salt和编码的字符串。同样,您需要(至少)记录盐的大小。请确保使用字节串联,而不是字符串。字节可以包含任何值,包括无效字符,控制字符等。
在连接之后,您可以将生成的字节数组提供给散列函数。
如果PHP中的字节串联有问题,则可以使用十六进制值。但是不要忘记在将它们输入哈希方法之前将它们转换回字节。