java - 由 Java AES 加密的字符串,在 Python 问题中解密
问题描述
我有一个 Java 代码来加密(使用密钥的 AES 加密)JSON 并将其存储在 Oracle 数据库 LONG RAW 列中。
我有一个 python 代码来读取该列中的数据并解密。以下是我用于解密的代码。
代码运行良好,但解密后我看不到 JSON,而是打印了一些不可读的字符串。
c = conn.cursor()
c.execute(u'select KEY_VALUE from TEST1')
encoded = "";
for row in c:
encoded = base64.b64encode(row[0])
print(encoded)
key = 'F50D518354690A8630BCE683B7AC8F55'
aes = AES.new(key, AES.MODE_CBC, 16 * b'\0')
print(aes.decrypt(encoded))
conn.close()
你能指出我错在哪里吗?
编码字符串也打印得很好,并且与 Oracle 数据库中的值相匹配。
我尝试使用 AES.MODE_ECB,因为 java 代码不是 iv 加密但仍然是同样的问题
下面是java中的加解密代码。我想在 python 中复制解密。
解密
public static String decryptText(byte[] byteCipherText, SecretKey secKey) throws Exception {
// AES defaults to AES/ECB/PKCS5Padding in Java 7
System.out.println(secKey.toString());
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.DECRYPT_MODE, secKey);
byte[] bytePlainText = aesCipher.doFinal(byteCipherText);
return new String(bytePlainText);
}
加密
public static byte[] encryptText(String plainText, String key) throws Exception {
// AES defaults to AES/ECB/PKCS5Padding in Java 7
System.out.println("key is "+key);
SecretKey secKey=decodeKeyFromString(key);
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.ENCRYPT_MODE, secKey);
byte[] byteCipherText = aesCipher.doFinal(plainText.getBytes());
return byteCipherText;
}
decodeKeyFromString 方法只有下面一行:
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
我什至尝试在 oracle 中将加密值写入 blob,然后进行解密,但仍然是相同的垃圾值。
for row in c:
encoded=row[0]
encrypted= open(blobpath,'wb')
encrypted.write(encoded.read())
encrypted.close()
with open('encrypted.txt', 'r') as myfile:
data=myfile.read().replace('\n', '')
key='F50D518354690A8630BCE683B7AC8F55'
aes = AES.new(key, AES.MODE_ECB)
e=unpad(aes.decrypt(base64.b64encode(data)))
解决方案
推荐阅读
- php - PHP - 如何使用 CURLOPT_PUT 设置电子邮件标题?
- java - 如何在自定义 ArrayList 中实现 subList()
- annotations - 在指令文档中编写代码的最佳实践是什么?(# 对 $)
- python - 如何根据 Python 中的条件更改 pandas DataFrame 列中的值
- c# - NLog 2 文件记录将在两个文件中记录相同的信息
- r - 在数据和图形中查找分类和数值变量的总数 - R
- java - 是否可以使用 Selenium WebDriver 自动进行指纹扫描?
- sql - 对于给定的产品,对于每家商店,将附近所有商店的每日销售额相加
- reactjs - 根据条件有条件地更改同一级别的 HTML 标记
- node.js - 有没有办法可以使用 docker 并容器化 node js 应用程序的不同功能?