CryptoJS加密Go解密

我有以下Go代码

ciphertext := "Zff9c+F3gZu/lsARvPhpMau50KUkMAie4j8MYfb12HMWhkLqZreTk8RPbtRB7RDG3QFw7Y0FXJsCq/EBEAz//XoeSZmqZXoyq2Cx8ZV+/Rw="

decodedText, _ := base64.StdEncoding.DecodeString(ciphertext)

decodedIv, _ := base64.StdEncoding.DecodeString("u9CV7oR2w+IIk8R0hppxaw==")

newCipher, _ := aes.NewCipher([]byte("~NB8CcOL#J!H?|Yr"))

cfbdec := cipher.NewCBCDecrypter(newCipher, decodedIv)

cfbdec.CryptBlocks(decodedText, decodedText)

data, _ := base64.StdEncoding.DecodeString(string(decodedText))

println(string(data))

输出是 {"data":{"value":300}, "SEQN":700 , "msg":"IT WORKS!!"

使用以下CryptoJS加密

function encrypt(message, key) {

let keyHex = CryptoJS.enc.Hex.parse(parseToHex(key))

let iv = CryptoJS.lib.WordArray.random(128 / 8);

let wordArray = CryptoJS.enc.Utf8.parse(message);

let base64 = CryptoJS.enc.Base64.stringify(wordArray);

let encrypted = CryptoJS.AES.encrypt(base64, keyHex, { iv: iv });

return {

cipher: encrypted.ciphertext.toString(CryptoJS.enc.Base64),

iv: CryptoJS.enc.Base64.stringify(iv),

length: base64.length,

size: encrypted.ciphertext.sigBytes,

}

}

并且可以用解密

function decrypt(message, key, iv) {

let ivEX = CryptoJS.enc.Hex.parse(decodeToHex(iv));

let keyEX = CryptoJS.enc.Hex.parse(parseToHex(key));

let bytes = CryptoJS.AES.decrypt(message, keyEX , { iv: ivEX});

let plaintext = bytes.toString(CryptoJS.enc.Base64);

return decodeToString(decodeToString(plaintext));

}

输出是{"data":{"value":300}, "SEQN":700 , "msg":"IT WORKS!!" }-这是正确的输出

为什么Go会有不同的输出?

回答:

请检查您的错误。总是

illegal base64 data at input byte 75

https://play.golang.org/p/dRLIT51u4I

更具体地说,字节75处的值为5,超出了base64可用字符的范围。在ascii中,它是ENQ(查询)字符。至于为什么它最终出现在您的最终base64字符串中,超出了我的范围。

编辑:确定发现了问题。无论出于何种原因,=结尾处的base64填充字符都会被解密为包含value的5个连续字节5。这是一个游乐场链接,显示已修复。https://play.golang.org/p/tf3OZ9XG1M

编辑:根据马特的评论。我更新了修复功能,以简单地删除所有PKCS7块填充并RawStdEncoding用于最后的base64解码。现在,这应该是一个合理的解决方法。

以上是 CryptoJS加密Go解密 的全部内容, 来源链接: utcz.com/qa/432529.html

回到顶部