0

阅读有关使用密码安全伪随机数生成器 (CSPRNG) 生成盐的信息。然后,此盐将附加到需要散列的字符串中。

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

对如何将二进制数据附加到字符串感到困惑,我看到了这个用于创建 hash 的 PHP 示例。它对二进制数据进行编码。

所以我只是想知道这是否是我需要做的。我需要对盐进行编码以获得字符串。然后我可以将该盐附加到需要散列的字符串中。还是有其他方法可以在字符串中添加盐?

注意我没有散列密码

4

2 回答 2

1

If you need to hash a password, please use password_hash() and password_verify(), and probably add password_needs_rehash() - see http://de2.php.net/password_hash.

You might notice that these functions are available since PHP 5.5.0 - if you are using an earlier version of PHP, you can add this compatibility library to make it work with PHP starting at 5.3.7.

It can't get very much easier than that.

于 2013-10-14T19:43:50.897 回答
0

最好先使用编码将字符串转换为二进制数据。UTF-8 编码可能最适合大多数用例。不要忘记(至少)记录使用了哪种字符编码。

现在连接盐和编码的字符串。同样,您需要(至少)记录盐的大小。请确保使用字节连接,而不是字符串。字节可以有任何值,包括无效字符、控制字符等。

连接后,您可以将生成的字节数组输入散列函数。


如果您在 PHP 中遇到字节连接问题,您可以改用十六进制值。但是不要忘记在将它们输入散列方法之前将它们转换回字节。

于 2013-10-15T09:44:44.413 回答