У меня есть код Java для шифрования (шифрование AES с помощью ключа) JSON и сохранения его в столбце LONG RAW базы данных Oracle.
У меня есть код 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);
}
encrypt
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");
Я даже попытался записать зашифрованное значение как blob в oracle, а затем выполнить расшифровку, но все те же значения мусора.
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)))