PBKDF2 (php) 产生的输出与 CryptoJS.PBKDF2 (js) 不同



正如你在下面看到的,我的php实现产生的密钥与JS版本不同(如果有任何区别,则在扩展脚本上运行)。PHP 端使用默认hash_pbkdf2,JS 端使用 CryptoJS 库。两者都使用 SHA256。

我在这里错过了什么吗?


PHP端

$salt = CryptoLib::randomString(128/8);
$password = "test";
$hasher = "sha256";
$iterations = 1000;
$outsize = 256;
$key = hash_pbkdf2($hasher, $password, $salt, $iterations, $outsize/8, true);
$key = bin2hex($key);

盐输出:523554455475374b5942304448317468

主要输出:CFB478A18D08030FE97BEED34FD2DA3ABF89BB7975FFDAAE9E39102A3B2EA1A2


JS端

var salt = "523554455475374b5942304448317468";
var password = "test";
var iterations = 1000;
var keySize = 256;
var key = CryptoJS.PBKDF2(password, salt, {keySize: 256/32, iterations: 1000, hasher:CryptoJS.algo.SHA256});

按键输出:1264AA07AEAB3CF93D4EE86A074697165EFF4914CE98E6D6EFD7F28C371B97

事实证明,这是ExtendScript的问题。如果您使用的是缩小版本的 CryptoJS,请确保切换到完整的 js 版本,因为出于某种原因,ExtendScript 将生成不同的值:

例:

包括缩小的Base64 CryptoJS模块:

salt.toString(CryptoJS.enc.Base64) 
= ADAASDASHFDSFKSD/ASDAHSDJAGLDFblablabla

包括完整的Base64 CryptoJS模块:

salt.toString(CryptoJS.enc.Base64)
= Zl0gFqZIc3CczOo/FBlNSn3NPAAsw=

最新更新