PBKDF2 (php) 产生与 CryptoJS.PBKDF2 (js) 不同的输出
PBKDF2 (php) produces different output than CryptoJS.PBKDF2 (js)
正如您在下面看到的,我的 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
原来是ExtendScript的问题。如果您使用的是 CryptoJS 的缩小版本,请确保切换到完整的 js 版本,因为出于某种原因 ExtendScript 会生成不同的值:
示例:
包含缩小的 Base64 CryptoJS 模块:
salt.toString(CryptoJS.enc.Base64)
= ADAASDASHFDSFKSD/ASDAHSDJAGLDFblablabla
包含完整的 Base64 CryptoJS 模块:
salt.toString(CryptoJS.enc.Base64)
= Zl0gFqZIc3CczOo/FBlNSn3NPAAsw=
正如您在下面看到的,我的 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
原来是ExtendScript的问题。如果您使用的是 CryptoJS 的缩小版本,请确保切换到完整的 js 版本,因为出于某种原因 ExtendScript 会生成不同的值:
示例:
包含缩小的 Base64 CryptoJS 模块:
salt.toString(CryptoJS.enc.Base64)
= ADAASDASHFDSFKSD/ASDAHSDJAGLDFblablabla
包含完整的 Base64 CryptoJS 模块:
salt.toString(CryptoJS.enc.Base64)
= Zl0gFqZIc3CczOo/FBlNSn3NPAAsw=