Reputation: 2831
I am trying to decrypt cipher text generated from AES_GCM. The cipher text was generated from "crypto/aes" library in golang. Now, I am trying to decipher the encrypted text in python using cryptodome library.
func AESEncryption(key []byte, plaintext []byte)([]byte, error){
c, err := aes.NewCipher(key)
if err != nil {
log.Printf("Error ocurred in generating AES key %s", err)
return nil, err
}
gcm, err := cipher.NewGCM(c)
if err != nil {
return nil, err
}
nonce := make([]byte, gcm.NonceSize())
if _, err = io.ReadFull(rand.Reader, nonce); err != nil {
log.Printf("Error ocurred in generating AES key %s", err)
return nil, err
}
return gcm.Seal(nonce, nonce, plaintext, nil), nil
}
plainText := "I will become what I deserve, Is there anything like freewil?"
Hex encoded key : e629ed98829a893899ddda67f582ede72e2a187dd1ddd5ada54f49cfe2c8675f
hex encoded encypted text = 9012a33bfb0a51dec4f96404cdd7300ec6afca1fa0d6679a7c036652d014a38faf909e9c44d08dffac121aa85d48b7256fa74542e2545e27dc070adfc03af26f2a32f50c2c311d5c91ff6de2ca3b4347da70669575c9b198f4 Deciphering the encrypted text in golang executes successfully but not in python.
Code for decryption in python.
cipher = AES.new(binascii.unhexlify(key), AES.MODE_GCM)
cipher.nonce = binascii.unhexlify(nonce)
cipher.decrypt(binascii.unhexlify(hex_encoded_encrypted_hex))
Upvotes: 5
Views: 17295
Reputation: 42009
Worked like a charm for me.
from Crypto.Cipher import AES
import binascii
key = binascii.unhexlify('e629ed98829a893899ddda67f582ede72e2a187dd1ddd5ada54f49cfe2c8675f')
data = binascii.unhexlify('9012a33bfb0a51dec4f96404cdd7300ec6afca1fa0d6679a7c036652d014a38faf909e9c44d08dffac121aa85d48b7256fa74542e2545e27dc070adfc03af26f2a32f50c2c311d5c91ff6de2ca3b4347da70669575c9b198f4')
nonce, tag = data[:12], data[-16:]
cipher = AES.new(key, AES.MODE_GCM, nonce)
cipher.decrypt_and_verify(data[12:-16], tag)
displays
b'I will become what I deserve, Is there anything like freewil?'
Upvotes: 8