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输出。