gpt4 book ai didi

php - 在mysql数据库中存储值时改变盐的值

转载 作者:行者123 更新时间:2023-11-29 02:24:38 24 4
gpt4 key购买 nike

我正在使用下面的代码在 PHP 中创建盐。

$length=100;
$bool=true;
$salt=openssl_random_pseudo_bytes ( $length, $bool );

当我回显它显示这个值的值(一个实例)

×YOEú ßPŽžJZýr³€žYM½N±~ÄŽ¼D‚ÝÆFÕ`O$I$îÇF    üKøäƒþ¥_5ûù„Ð… Ïq®ùä. ³æ¤ljî¬}Të‚´ù­B#3U96

但在存储在数据库中时,它会更改为

Ñx€gþ‚΀³€Œ¯´N§Å·.:gºÈá•ïjÇÖ…áf6uIùYbx}û€·iÀ0èFšDö¼6¥qzMéÁi‡±

该字段使用 latin1_swedish_ci 编码。

signup script

script containing hashing function, salt generator

table structure

最佳答案

openssl_random_pseudo_bytes 返回原始字节流,顾名思义。它不会返回旨在可读的“字符”。这些字节如何显示为字符完全取决于解释方;很明显,MySQL 正在以与您从 PHP 显示它的浏览器/控制台不同的编码解释字节。

如果将这些字节存储在 MySQL 中,则应将它们存储在 BLOB 类型列中,因为它们是无意义的 blob。

如果你想把它们当作字符,你需要对它们进行编码。最好的可能是一个简单的 bin2hex($salt),它将二进制数据编码为十六进制。或者使用 base64_encode

其次,openssl_random_pseudo_bytes 的第二个参数不应作为 bool 值传递。它是一个按引用传递的变量,允许您在事后检查字节是否具有很强的安全性:

$salt = openssl_random_pseudo_bytes($length, $strong);
if ($strong) {
// $salt is strong
} else {
// $salt is weak
}

关于php - 在mysql数据库中存储值时改变盐的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24801064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com