php - 为什么 Php pbkdf2 输出与 golang 不同?

标签 php go cryptography pbkdf2

我花了几个小时试图解决这个问题。我在 PHP 和 golang 中使用了相同的 pbkdf2 算法,但不知何故输出不同。

Go 语言

saltString := "e7655f410aa38e1ca05de7a7fd8fb84c"
password := "vibhor123"
salt, err := hex.DecodeString(saltString)
if err != nil {
    panic(err)
}
fmt.Println(salt)
fmt.Println(fmt.Sprintf("%x", pbkdf2.Key([]byte(input.Password), salt, 4096, sha256.Size, sha256.New)))

输出

3d70b8536a7b26d67419e220e1c244a1cc9431a3c23999c2f993d8a3a4dda13a

PHP

$salt = "e7655f410aa38e1ca05de7a7fd8fb84c";
$password = "vibhor123";
echo(hash_pbkdf2("sha256", $password, $salt, 4096));

输出

a8595b29ddb1a7819bae7e9d8809f26f053b3877197ed44e05e279459a826c64

根据我的理解,两者应该匹配。

最佳答案

PHP 的 hash_pbkdf2的 salt 必须以二进制字符串表示,而不是十六进制字符串。只需使用 hex2bin 将其转换为原始二进制文件即可。请参阅https://3v4l.org/IIXFM .

$salt = "e7655f410aa38e1ca05de7a7fd8fb84c";
$password = "vibhor123";
echo(hash_pbkdf2("sha256", $password, hex2bin($salt), 4096));
3d70b8536a7b26d67419e220e1c244a1cc9431a3c23999c2f993d8a3a4dda13a

关于php - 为什么 Php pbkdf2 输出与 golang 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62608844/

相关文章:

json - 对于encoding/json,如何优雅地处理键名称中包含撇号的 API JSON 调用?

go - 惯用的 Golang 协程

Android 加密库 FIPS 验证

php - 如何通过 EC2 Windows Server 和 XAMPP 设置来获取 URL 来托管 PHP 服务器?

php - 图像路径保存在数据库中但图像不在目标文件夹中

php - 如何为横幅添加自定义列而不是右列、左列、顶部列和底部列?

javascript - 如何从 firebase 在 Accelerated Mobile Pages(AMP) 中显示数据

sql - 包含 % 字符的数据库查询的扫描结果

java - 在 Java 中使用对称加密保护磁盘上的私钥

javascript - TweetNaCl.js 最小公钥签名示例