正如你在下面看到的,我的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=