将CSPRNG生成的盐附加到需要进行哈希处理的字符串

时间:2013-10-14 19:27:49

标签: php encryption encoding cryptography

阅读generating salt using Cryptographically Secure Pseudo-Random Number Generator (CSPRNG)。然后,此salt将附加到需要进行哈希处理的字符串中。

但是,CSPRNG函数生成的盐(对于PHP我使用openssl_random_pseudo_bytes)实际上是二进制数据。

对于如何将这个二进制数据附加到字符串感到困惑,我看到了这个PHP example for creating hash。它编码二进制数据。

所以我只是想知道这是否是我需要做的。我需要编码salt来获取字符串。然后我可以将盐附加到需要哈希的字符串上。或者还有其他方法可以在字符串中添加盐吗?

注意我没有哈希密码

2 个答案:

答案 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中的字节串联有问题,则可以使用十六进制值。但是不要忘记在将它们输入哈希方法之前将它们转换回字节。