首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CryptoJS加密解密

CryptoJS加密解密
EN

Stack Overflow用户
提问于 2017-03-29 20:17:51
回答 1查看 1.5K关注 0票数 2

我有下面的围棋代码

代码语言:javascript
复制
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加密的

代码语言:javascript
复制
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,
  }
}

并且可以用

代码语言:javascript
复制
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有不同的输出?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-29 21:21:14

请检查一下您的错误。始终

illegal base64 data at input byte 75

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

更具体地说,字节75处的值是5,它超出了base64可用的字符范围。在ascii中,这是ENQ (查询)的特征。至于为什么这最后出现在您的最后一个base64字符串中,我是无法理解的。

编辑:好,找到问题了。无论出于什么原因,结尾处的base64填充字符=被解密为包含值5的5个连续字节。这是一个操场链接,显示它是固定的。https://play.golang.org/p/tf3OZ9XG1M

编辑:根据马特的评论。我更新了fix函数,只需删除所有的PKCS7块填充,并使用RawStdEncoding进行最后一次base64解码。这应该是一个合理的解决办法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43103343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档