我使用 JavaScript 中的 CryptoJS 使用给定密钥进行“简单”AES 解密
var CryptoJS = require('crypto-js');
let encrypted = 'U2FsdGVkX19dGrnVQb3BYZ9SWtQBCt2XZDeWFBEfWoi3qnSHg26aQnADUKjTDtSgpPUDzXc59XrIBsTZp9IRg4dYy9Lo0/GjSVn8qlINhE8NJXozQvUNPJSs6nvWSiivCsh9KHGsWFEusMeTefM9V2hKRpQHnFp5VHDLPgGImjHXOQO71eO4qFoQ3ESqUdnDO94nlTjcJU8AP+GabRMjHP08OVz87uyV4SfvT7AZhAYuOPOumHbJaV5nHz2ouqBZgXR3OK07AUk6V+Faz43BT3Qd2+xGLyz8C+teekmudVhmGlnzvMK/VUs0bNDUttdVVnkz/VbXVOj++07uhDsJoMKzZQYTNLkIl9HnuXDmhKOrLSYs2EYpNrH9T/2ZP3nwqJaI7bbLBCfCpNFGNLY4jyNou4Bl5GEK6sxg0zraUCZTgvfuuvBpKWFcFhPvYf8eJGoI3dOWTRWyRnS6e4j3bg==';
let key = 'KBlgcIOrad7EYpiz9LNNTMSg98QoqSVK';
var decrypted = CryptoJS.AES.decrypt(encrypted, key);
let data = decrypted.toString(CryptoJS.enc.Utf8);
console.log(data);
我尝试在 Go (Golang) 中解密该数据,但失败了。我对 AES 一无所知,这是我到目前为止的代码
package main
import (
"crypto/aes"
"crypto/cipher"
"encoding/base64"
"fmt"
)
func main() {
encrypted := "U2FsdGVkX19dGrnVQb3BYZ9SWtQBCt2XZDeWFBEfWoi3qnSHg26aQnADUKjTDtSgpPUDzXc59XrIBsTZp9IRg4dYy9Lo0/GjSVn8qlINhE8NJXozQvUNPJSs6nvWSiivCsh9KHGsWFEusMeTefM9V2hKRpQHnFp5VHDLPgGImjHXOQO71eO4qFoQ3ESqUdnDO94nlTjcJU8AP+GabRMjHP08OVz87uyV4SfvT7AZhAYuOPOumHbJaV5nHz2ouqBZgXR3OK07AUk6V+Faz43BT3Qd2+xGLyz8C+teekmudVhmGlnzvMK/VUs0bNDUttdVVnkz/VbXVOj++07uhDsJoMKzZQYTNLkIl9HnuXDmhKOrLSYs2EYpNrH9T/2ZP3nwqJaI7bbLBCfCpNFGNLY4jyNou4Bl5GEK6sxg0zraUCZTgvfuuvBpKWFcFhPvYf8eJGoI3dOWTRWyRnS6e4j3bg=="
key := "KBlgcIOrad7EYpiz9LNNTMSg98QoqSVK"
e, _ := base64.StdEncoding.DecodeString(encrypted)
k := []byte(key)
dst, err := decryptAES(e, k)
if err != nil {
panic(err)
}
fmt.Println(string(dst))
}
func decryptAES(ciphertext []byte, key []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
if len(ciphertext) < aes.BlockSize {
return nil, fmt.Errorf("ciphertext is too short")
}
iv := ciphertext[:aes.BlockSize]
ciphertext = ciphertext[aes.BlockSize:]
stream := cipher.NewCFBDecrypter(block, iv)
plaintext := make([]byte, len(ciphertext))
stream.XORKeyStream(plaintext, ciphertext)
return plaintext, nil
}
结果:�9�����ff���������������jTY:��SV�PZLDw%�z��0���&���j@ '��_H��0+����b�8�b}�;Y�d���0�^P얿L�aC�3�2�m��d�h� -��%Z(0��c�v�r�:�=�>}���b��n������g�lu}�������&�3� .�%|M��fxdGW27z�D�J���"(�[D�+<��n�z�4:����� ��iZs�ix��G�$��.= �3J��5{"g��#z ���Z�#���@���Xs��#�ZR;���VI������ ��w�X/�bp�r ��
快速尝试:https://goplay.tools/snippet/QooAajJ4ky0
请帮助我使用 Go 解密该数据或修复我的代码。谢谢你<3
在 @Topaco 的评论中添加更多详细信息,
根据
CryptoJS
文档,默认模式为CBC
。所以你的密文是以CBC
模式加密的。
但是在您的
go
代码中,您使用了 CFB
模式来解密密文,这显然不是正确的模式。而不是cipher.NewCFBDecrypter(block, iv)
,你必须使用
NewCFBDecrypter
,NewCBCDecrypter