crypto js错误的des ecb解码



我需要在ECB模式下使用base64密钥解密base64字符串,并使用DES填充Iso10126。

理论上很简单:

const decryptedKeyDes = CryptoJS.DES.decrypt(
encryptedData, // QAKH7qnKxZTIta...
ResponseParser.secretKey, // MfKhm... length=32
{
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Iso10126
}
);

我得到了sigBytes:162响应,在将其转换为base64后(因为那时我需要解压缩(,我得到了错误的 byteLength:243,它应该是byteLength:395(我只是用我正确的Java代码来编译它(。

我不知道这里出了什么问题。

我也试着用node.js的crypto来做,但我也得到了错误和不同的结果。我找不到如何在crypto中设置padding,只能获得utf8binaryascii

function encodeDesECB(textToEncode, keyString) {
var key = new Buffer(
"some key with 32 length".substring(0, 8),
"utf8"
);
var cipher = crypto.createDecipheriv("des-ecb", key, null);
cipher.setAutoPadding(false);
var c = cipher.update(textToEncode, "base64", "utf8");
c += cipher.final("utf8");
return c;
}

java代码是:

import javax.crypto.Cipher
import static javax.crypto.Cipher.DECRYPT_MODE
//CIPHER_ALGORITHM_MODE_PADDING = 'DESede/ECB/ISO10126Padding'
Cipher decryptingCipher = Cipher.getInstance(CIPHER_ALGORITHM_MODE_PADDING)
decryptingCipher.init(DECRYPT_MODE, secretKeySpec)
decryptingCipher.doFinal(data)

其中secretKeySpec是具有algorithm: DESedekey的对象,即bit[]等于我的。

我不知道我的代码出了什么问题。

CryptoJs是否工作错误,或者可能我在解码时忘记了什么。

你有什么线索吗?

多亏了@Topaco,我终于解决了这个问题。

密钥必须是WordArray:CryptoJS.enc.Base64.parse('some key with 32 length')

消息必须是base64字符串:QAKH7qnKxZTIta...

然后你需要像这样解析响应:tripleDesResult.toString(CryptoJS.enc.Base64)

再次感谢!

最新更新