CryptoJS DES (ECB) 加密 - Base64 编码 - 没有产生正确的结果
CryptoJS DES (ECB) Encryption - Base64 encoded - not producing the correct result
我们有一个第 3 方供应商指示我们 https://www.tools4noobs.com/online_tools/encrypt/ 为其 API 生成身份验证令牌。
这工作正常,但我们现在处于需要以编程方式生成这些令牌的阶段。需要是DES格式,ECB模式,Base64编码。
我们尝试了 CryptoJS javascript 库,但结果与 https://www.tools4noobs.com/online_tools/encrypt/
的输出不匹配
var encrypted = CryptoJS.DES.encrypt(text, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var finalEncrypted = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
console.log(finalEncrypted);
我哪里错了?
Tools4noobs 使用 PHP-method mcyrpt_encrypt
,它与 Zero-Byte-Padding 一起使用。发布的代码使用 PKCS7-Padding。要使用 Zero-Byte-Padding,必须将代码中的填充更改为 CryptoJS.pad.ZeroPadding
。
但是如果要使用Pkcs7-Padding,那么Tools4noobs不是一个好的选择,因为padding不能设置。在这种情况下,另一个选项是 TxtWizard.
另一个错误来源是密钥的格式。但是,这里不能说这是否也是一个问题,因为发布的代码中没有显示密钥生成。重要的是,密钥作为 WordArray
而不是字符串传递。如果它作为字符串传递,则它被解释为生成实际密钥的密码短语,请参阅 The Cipher Input。
以下代码
var key = CryptoJS.enc.Latin1.parse("12345678"); // key as WordArray
var text = "The quick brown fox jumps over the lazy dog";
var encrypted = CryptoJS.DES.encrypt(text, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.ZeroPadding // Zero-Byte-Padding
});
var finalEncrypted = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
console.log(finalEncrypted);
有输出
XokzhoQlYFGG7ZfTNqdvr0QGMsFF24oSZ5v+vsPDNlPA+GbJ2peAY/7pNhpOerOV
按照Tools4noobs输出。
我们有一个第 3 方供应商指示我们 https://www.tools4noobs.com/online_tools/encrypt/ 为其 API 生成身份验证令牌。
这工作正常,但我们现在处于需要以编程方式生成这些令牌的阶段。需要是DES格式,ECB模式,Base64编码。
我们尝试了 CryptoJS javascript 库,但结果与 https://www.tools4noobs.com/online_tools/encrypt/
的输出不匹配var encrypted = CryptoJS.DES.encrypt(text, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var finalEncrypted = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
console.log(finalEncrypted);
我哪里错了?
Tools4noobs 使用 PHP-method mcyrpt_encrypt
,它与 Zero-Byte-Padding 一起使用。发布的代码使用 PKCS7-Padding。要使用 Zero-Byte-Padding,必须将代码中的填充更改为 CryptoJS.pad.ZeroPadding
。
但是如果要使用Pkcs7-Padding,那么Tools4noobs不是一个好的选择,因为padding不能设置。在这种情况下,另一个选项是 TxtWizard.
另一个错误来源是密钥的格式。但是,这里不能说这是否也是一个问题,因为发布的代码中没有显示密钥生成。重要的是,密钥作为 WordArray
而不是字符串传递。如果它作为字符串传递,则它被解释为生成实际密钥的密码短语,请参阅 The Cipher Input。
以下代码
var key = CryptoJS.enc.Latin1.parse("12345678"); // key as WordArray
var text = "The quick brown fox jumps over the lazy dog";
var encrypted = CryptoJS.DES.encrypt(text, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.ZeroPadding // Zero-Byte-Padding
});
var finalEncrypted = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
console.log(finalEncrypted);
有输出
XokzhoQlYFGG7ZfTNqdvr0QGMsFF24oSZ5v+vsPDNlPA+GbJ2peAY/7pNhpOerOV
按照Tools4noobs输出。