python AES加密SecretKeySpec问题

2024-06-24 13:34:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我们在从Java到Python重新构建加密逻辑时遇到了问题:

工作Java逻辑:下面的代码将JSON返回到客户机系统(解密成功使用JSON)

message = "sampleplaintext..";
byte[] ivData = new byte[16];
byte[] keyData = new byte[16];
IvParameterSpec initializationVector = new IvParameterSpec(ivData);
SecretKey secretKey = new SecretKeySpec(keyData, "AES"); //equivalent line/logic for python ?
Cipher symmetricalCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
symmetricalCipher.init(1, secretKey, initializationVector);
byte[] encryptedBytes = symmetricalCipher.doFinal(message.getBytes());
return (new JSONObject())
.put("key", StringCodec.encodeBase64(msgkey))
.put("iv", StringCodec.encodeBase64(msgiv))
.put("messageContent", StringCodec.encodeBase64(encryptedBytes));

使用pycryptodome库的Python逻辑:下面的代码将JSON返回到客户端系统(其中解密无法使用JSON

message = "sampleplaintext..";
data = bytes(message, 'utf-8')
msgiv = Random().read(AES.block_size)
msgkey = Random().read(AES.block_size)
AESCipherEncryptor = AES.new(msgkey, AES.MODE_CBC, msgiv)  
EncryptedMSGContent = AESCipherEncryptor.encrypt(data) 
ResEncrypted_string = json.dumps({
'key':base64.b64encode(msgkey).decode("utf-8"),
'iv':base64.b64encode(msgiv).decode("utf-8"),
'message':base64.b64encode(EncryptedMSGContent).decode("utf-8")
})

我们怀疑是私钥导致了这个问题,因为在Java中它需要AES Keyspec对象,而我们不确定在python中如何做到这一点


Tags: jsonmessagenewput逻辑javabyteutf