如何解决Pycryptodome AES_GCM加密到Java解密
我一直在尝试用Python进行AES_GCM加密,而在Java中进行解密,以下是我要完成的相关代码片段,我还检查了以下问题:Pycrypto AES GCM encryption and Java decryption对我的问题。我怀疑我为Python设置的IV / nonce错误,将不胜感激。
Python加密代码:
from Crypto.Cipher import AES
from base64 import b64encode
someKey = 'Sixteen byte key'
cipher = AES.new(someKey,AES.MODE_GCM,nonce='0000000000000000',mac_len=16)
ciphertext,tag = cipher.encrypt_and_digest(data)
ciphertext = ciphertext + tag
print b64encode(ciphertext)
Java解密代码:
private static byte[] initializationVector = new byte[16];
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
SecretKeySpec keySpec = new SecretKeySpec(someKey,"AES");
GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(128,initializationVector);
cipher.init(Cipher.DECRYPT_MODE,keySpec,gcmParameterSpec);
byte[] bytesString = Base64.getDecoder().decode(theString);
return new String(cipher.doFinal(bytesString),"UTF-8");
但是我无法用Java解密它,出现以下错误:
javax.crypto.AEADBadTagException: Tag mismatch!
at java.base/com.sun.crypto.provider.GaloisCounterMode.decryptFinal(GaloisCounterMode.java:623)
at java.base/com.sun.crypto.provider.CipherCore.finalNoPadding(CipherCore.java:1116)
at java.base/com.sun.crypto.provider.CipherCore.fillOutputBuffer(CipherCore.java:1053)
at java.base/com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:853)
at java.base/com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2202)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。