Я пробовал несколько способов сделать это в течение трех дней и много часов. Я НЕ ЗДЕСЬ. Я использую Java для шифрования определенных данных с использованием AES/CBC/PKCS7Padding и пытается дешифровать, используя то же самое в Python, но это просто не сработает. Я использую эту Python aes.py библиотеку http://anh.cs.luc.edu/331/code/aes.py
я получаю эту ошибку:Java AES Шифрование, дешифрование Python не работает
File "/root/ascend/aes.py", line 384, in decrypt
block[(i+(j*4))] = iput[(i*4)+j]
exceptions.IndexError: list index out of range
Вот код Java Айз:
public String aesEncrypt(String key, String data) throws InvalidKeyException, BadPaddingException, IllegalBlockSizeException, NoSuchPaddingException, NoSuchAlgorithmException, UnsupportedEncodingException, InvalidAlgorithmParameterException {
SecretKey secKey = new SecretKeySpec(key.getBytes(), "AES");
KeyGenerator KeyGen = KeyGenerator.getInstance("AES");
KeyGen.init(256);
Cipher AesCipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
AesCipher.init(Cipher.ENCRYPT_MODE, secKey, new IvParameterSpec(IV.getBytes("UTF-8")));
byte[] byteCipherText = AesCipher.doFinal(data.getBytes());
return Base64.encodeToString(byteCipherText, 0).trim();
}
Вот является Java ключ поколения, который дает ключ для питона использования, а также:
public String genAESKey() {
String uuid = UUID.randomUUID().toString();
return uuid.replace("-","");
}
а вот код питона для расшифровки:
self.data = aes.decryptData(user.aes_key, base64.b64decode(self.data))
#Where user.aes_key is the 256bit Aes key generated by java.
Может кто-нибудь, пожалуйста, взгляните и объясните, что в этом плохого? Они оба используют один и тот же ключ aes 256, дополнение pkcs7 и CBC. Если кто-нибудь знает о лучшей библиотеке, которая работает с таким кодом Java, пожалуйста, покажите.
Редактирование: Просто, чтобы прояснить ситуацию, расшифровка Aes работает на Java, а не на шифроне Python и Python, используя этот ключ aes, а также расшифровывает python. Просто не java -> python. И self.data - это зашифрованные java-данные.
Редактировать # 2: Просто попытался сделать это с помощью PyCrypto. Точная точная ошибка происходит.
return self._cipher.decrypt(ciphertext)
exceptions.ValueError: Input strings must be a multiple of 16 in length
Использование PyCrypto: https://www.dlitz.net/software/pycrypto/ – Will
Вы сравнивали вывод обеих программ с одним и тем же ключом и данными? Можно ожидать, что конечное пространство или новая строка будут отсутствовать. –