如下所示,我的php实现产生的密钥与JS版本不同(如果有任何不同,则在Extend Script上运行)。 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});
密钥输出: 1264aa07aeab3cf93d4ee86a074697165efffe4914ce98e6d6efd7f28c371b97
答案 0 :(得分:1)
原来这是ExtendScript的一个问题。如果您使用的是CryptoJS的缩小版本,请确保切换到完整的js版本,因为出于某种原因,ExtendScript将生成不同的值:
示例:
包含缩小的Base64 CryptoJS模块:
salt.toString(CryptoJS.enc.Base64)
= ADAASDASHFDSFKSD/ASDAHSDJAGLDFblablabla
包含完整Base64 CryptoJS模块的:
salt.toString(CryptoJS.enc.Base64)
= Zl0gFqZIc3CczOo/FBlNSn3NPAAsw=