在 Golang 中加密 在 JavaScript 中解密

问题描述 投票:0回答:1

我正在尝试使用 GoLang 创建加密

func Encrypt(text string) (string,error) {
secretKey := "XM1IyN4ZOJfcbDH3Md7m7XmNGGjtXMJw"
    block, err := aes.NewCipher([]byte(secretKey))
    if err != nil {
        log.Fatal(err)
        return "", err
    }
    plainText := []byte(text)
    iv := []byte("7061737323313233")
    cfb := cipher.NewCFBEncrypter(block, iv)
    cipherText := make([]byte, len(plainText))
    cfb.XORKeyStream(cipherText, plainText)
    return base64.StdEncoding.EncodeToString(cipherText), nil
}

然后用Javascript解密

  var key = CryptoJS.enc.Utf8.parse('XM1IyN4ZOJfcbDH3Md7m7XmNGGjtXMJw');
  var iv = CryptoJS.enc.Utf8.parse('7061737323313233');
  
  var encryptedData = "7sEPYaArhx0YGAqDzYHvhZFOCBvmbzAmZBCp7AwrRCiYPGlS9y+zA18qj9afqeEm00qvGBRkQA24MwK9jxStpkaS8VvGs78VyG1vt2CsEIagXFiokdj6AnuwrYt2kUp7Xex3qurYr3B4bl2jlPeA6kzB0XeG07vB5teblvvfkRgwQ3Mvph+soCPJ9byTqycdjqa4qpgWnvN3KpMWu7cmYvOITOXhv0K88SLvVKg4VRzpxJ3DtUmIF2fm8M6jQ1I6uIvNFVV3WV6pp8MDq31/xe0vFDujNBp/RYiYyB456pnj0gHPlvlVS6SblTZc11wsCU8GPClnlCyZkeIICKRKCEGyfh7tQLMRMRlcjmWDRdcMx9zFDRroNeHYeG1+b/H4TOgVQG1iqkM9O8/4TD1m2BvYe8ZH7248ceqZucFfSa0rigLZE1K1B/QnQGOfpxuTJjMkw7qdmnm4v6yYOBJPNZa1L5zo9L/RWpkSYzRcjus5wHzuyi8a";
  
  var decrypted = CryptoJS.AES.decrypt(encryptedData, key, {
    keySize: 256 / 8,
    iv: iv,
    mode: CryptoJS.mode.CFB,
    padding: CryptoJS.pad.Pkcs7
});

var decryptedText = decrypted.toString(CryptoJS.enc.Utf8);
console.log("Decrypted Text:", CryptoJS.enc.Utf8.stringify(decrypted));

问题是Javascript中的返回字符串最多只有125个字符,有时文本太短时无法解密,是我解密中的配置有问题吗?

我已经尝试过使用其他加密/解密模式,但似乎也不起作用。

typescript go
1个回答
0
投票
  • Go 加密功能更新:

    iv := []byte("7061737323313233") //16 字节

  • JavaScript 解密

    var iv = CryptoJS.enc.Latin1.parse('7061737323313233');

  • 当您使用 CFB 模式在 go 和 js 之间加密和解密数据时,由于 cfb 工作方式的性质,您不需要填充

    填充:CryptoJS.pad.NoPadding

© www.soinside.com 2019 - 2024. All rights reserved.