我正在尝试使用 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个字符,有时文本太短时无法解密,是我解密中的配置有问题吗?
我已经尝试过使用其他加密/解密模式,但似乎也不起作用。
Go 加密功能更新:
iv := []byte("7061737323313233") //16 字节
JavaScript 解密
var iv = CryptoJS.enc.Latin1.parse('7061737323313233');
当您使用 CFB 模式在 go 和 js 之间加密和解密数据时,由于 cfb 工作方式的性质,您不需要填充
填充:CryptoJS.pad.NoPadding