Maison >développement back-end >Golang >Comment implémenter CryptoJS.AES.decrypt dans Go
J'utilise CryptoJS en JavaScript pour faire un "simple" décryptage AES avec une clé donnée
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);
J'ai essayé de décrypter ces données dans Go (Golang) mais j'ai échoué. Je ne connais rien à AES et voici mon code pour l'instant
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 }
Résultat : �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 ��
Essayage rapide : https://goplay.tools/snippet/QooAajJ4ky0
Veuillez m'aider à décrypter ces données à l'aide de Go ou à corriger mon code. Merci <3
Comme @Topaco l'a clairement mentionné dans les commentaires,
Crypté selon le mode CryptoJS
文档,默认模式为CBC
。所以你的密文是用CBC
.
Mais dans votre go
代码中,您使用了CFB
模式,通过使用cipher.NewCFBDecrypter(block, iv)
pour déchiffrer le texte chiffré, ce n'est évidemment pas le bon mode.
Vous devez utiliser NewCFBDecrypter /pkg.go.dev/crypto/cipher#NewCBCDecrypter" rel="nofollow noreferrer">NewCBCDecrypter
Je peux utiliser le package https://www.php.cn/link/2c6ee860dfb322d0fc5dbbf5a2aa0b39成功解密>.
<code>package main import ( "fmt" "github.com/Luzifer/go-openssl" ) func main() { data := "U2FsdGVkX19dGrnVQb3BYZ9SWtQBCt2XZDeWFBEfWoi3qnSHg26aQnADUKjTDtSgpPUDzXc59XrIBsTZp9IRg4dYy9Lo0/GjSVn8qlINhE8NJXozQvUNPJSs6nvWSiivCsh9KHGsWFEusMeTefM9V2hKRpQHnFp5VHDLPgGImjHXOQO71eO4qFoQ3ESqUdnDO94nlTjcJU8AP+GabRMjHP08OVz87uyV4SfvT7AZhAYuOPOumHbJaV5nHz2ouqBZgXR3OK07AUk6V+Faz43BT3Qd2+xGLyz8C+teekmudVhmGlnzvMK/VUs0bNDUttdVVnkz/VbXVOj++07uhDsJoMKzZQYTNLkIl9HnuXDmhKOrLSYs2EYpNrH9T/2ZP3nwqJaI7bbLBCfCpNFGNLY4jyNou4Bl5GEK6sxg0zraUCZTgvfuuvBpKWFcFhPvYf8eJGoI3dOWTRWyRnS6e4j3bg==" secret := "KBlgcIOrad7EYpiz9LNNTMSg98QoqSVK" o := openssl.New() dec, err := o.DecryptBytes(secret, []byte(data)) if err != nil { fmt.Printf("An error occurred: %s\n", err) } fmt.Printf("Decrypted text: %s\n", string(dec)) } </code>
Sortie
Decrypted text: [{"file":"https://eno.tendoloads.com/_v6/71f87b4028d27b3ba749bd2029f3248245618a740ca81a9a9863f257784436f85c939482f4d306945639b935dc612f232173cae4f207297dea8798f69741cdadcf03986938ae645355b02ac49101bd99d26dbcacac3e6ab00b678324a21474728d09a70cb4b5086fbc36943efb9f1695c522b23382b639d8f473c8ce9a528151/master.m3u8","type":"hls"}]
ou si vous souhaitez utiliser CryptoJS
中使用CFB
alors vous devez spécifier explicitement le mode.
var decrypted = CryptoJS.AES.decrypt(encrypted, key, { mode: CryptoJS.mode.CFB, });
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!