簡體   English   中英

CryptoJS加密Go解密

[英]CryptoJS encrypt Go decrypt

我有以下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!!" } {"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填充字符=都會被解密為包含值5 5個連續字節。 這是一個游樂場鏈接,顯示已修復。 https://play.golang.org/p/tf3OZ9XG1M

編輯:根據馬特的評論。 我更新了修復功能,以簡單地刪除所有PKCS7塊填充, RawStdEncoding最后的base64解碼使用RawStdEncoding 現在,這應該是一個合理的解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM