Я пытаюсь расшифровать зашифрованный код Java AES в скрипт Python, но не удается полностью расшифровать, что означает, что некоторые из исходных данных не расшифровываются, но остальные данные расшифровываются нормально. Ниже приведен код Python -
decryptor = Cipher(
algorithms.AES(self._encryption_key),
modes.CBC(initialization_vector),
self._backend
).decryptor()
plaintext_padded = decryptor.update(ciphertext)
try:
plaintext_padded += decryptor.finalize()
except ValueError:
raise InvalidToken
unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
unpadded = unpadder.update(plaintext_padded)
try:
unpadded += unpadder.finalize()
except ValueError:
raise InvalidToken
А ниже - мой Java-код, который может успешно зашифровывать и дешифровать свой собственный сгенерированный шифр в обычный и наоборот.
aesCipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
.
.
static SecretKey generateSecretKey() {
SecretKeyFactory pbeKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1And8bit");
SecretKey secretKey;
try {
SecureRandom rand = new SecureRandom();
byte[] salt = new byte[32];
rand.nextBytes(salt);
// WORK-AROUND change rand.nextInt(2048) to rand.nextInt(2047) + 1 to genterate 1-2048;
int iterationCount = rand.nextInt(2047) + 1;
KeySpec pbeKeySpec = new PBEKeySpec(new String(rand.generateSeed(24)).toCharArray(), salt, iterationCount, 256);
SecretKey pbeKey = pbeKeyFactory.generateSecret(pbeKeySpec);
secretKey = new SecretKeySpec(pbeKey.getEncoded(), "AES");
} catch (Exception e) {
throw new RuntimeException(e);
}
return secretKey;
}
static SymmetricEncryptionEntry symmetricEncrypt(SecretKey key, String data) {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
SymmetricEncryptionEntry entry;
try {
byte[] iv = generateIv(cipher.getBlockSize());
IvParameterSpec ivParams = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, key, ivParams);
byte[] cipherText = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
entry = new SymmetricEncryptionEntry(cipherText , iv);
} catch (Exception e) {
throw new RuntimeException(e);
}
return entry;
}
private static byte[] generateIv(int length) {
byte[] b = new byte[length];
new SecureRandom().nextBytes(b);
return b;
}
Ниже приведен реальный простой текст и расшифрованный простой текст -
, ожидаемый при расшифровке с помощью python
b'{"auth_key":"eyJhbGciOiJSUzI1NiIsImtpZCI6ImZhMWQ3NzBlZWY5ZWFhNjU0MzY1ZGE5MDhjNDIzY2NkNzY4ODkxMDUiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vY2hhdHEtc3RhZ2luZyIsImF1ZCI6ImNoYXRxLXN0YWdpbmciLCJhdXRoX3RpbWUiOjE1NzExMjM5NDcsInVzZXJfaWQiOiJyQ3N0aTBoMEczVUZmVWk2Q1oxYjNJOEJmOVIyIiwic3ViIjoickNzdGkwaDBHM1VGZlVpNkNaMWIzSThCZjlSMiIsImlhdCI6MTU3MTIwMjY4OSwiZXhwIjoxNTcxMjA2Mjg5LCJwaG9uZV9udW1iZXIiOiIrODQxMjM0NTY3ODIiLCJmaXJlYmFzZSI6eyJpZGVudGl0aWVzIjp7InBob25lIjpbIis4NDEyMzQ1Njc4MiJdfSwic2lnbl9pbl9wcm92aWRlciI6InBob25lIn19.0OCskQkPKq5yxku02PuBgoZMFHgMfZBVPptQaVExrWYRDrEM3uUwDrDXAWiqA6L9i54fg_7dfWBwnPvQ71g4Lzsft60_JycS0-C_kSlCBxVSlX5J8WDTwNGm6p5-QDxN2bU9fwglzmggMst-4A3tLlPLQRnttuishFKhgr40ABHX8tksNfbs626YhTiwY6vD6_Gn0k7X7jh1HsHAUUcnPZq2tCXRFUKNDmF_4lC6vc7-Cs5zHpIlKtaAXoQBRe9HYsEvYfK2tOey8T_3mDC_Eh36fcve6HCOQBt9EtFPRIUcKZgFDWPoG70t-ABk66Lr2BjejbOsBBnA9R7492t6Sg","correlation_id":"1fb572ff331346b7","user_id":"rCsti0h0G3UFfUi6CZ1b3I8Bf9R2"}'
ПолученоРасшифровка Python
b'\xae\xfa\x9c\xb3\x8c+\x17\xfeI\xc9\xb8\x0b\x0e@\xac\rhbGciOiJSUzI1NiIsImtpZCI6ImZhMWQ3NzBlZWY5ZWFhNjU0MzY1ZGE5MDhjNDIzY2NkNzY4ODkxMDUiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL3NlY3VyZXRva2VuLmdvb2dsZS5jb20vY2hhdHEtc3RhZ2luZyIsImF1ZCI6ImNoYXRxLXN0YWdpbmciLCJhdXRoX3RpbWUiOjE1NzExMjM5NDcsInVzZXJfaWQiOiJyQ3N0aTBoMEczVUZmVWk2Q1oxYjNJOEJmOVIyIiwic3ViIjoickNzdGkwaDBHM1VGZlVpNkNaMWIzSThCZjlSMiIsImlhdCI6MTU3MTIwMjY4OSwiZXhwIjoxNTcxMjA2Mjg5LCJwaG9uZV9udW1iZXIiOiIrODQxMjM0NTY3ODIiLCJmaXJlYmFzZSI6eyJpZGVudGl0aWVzIjp7InBob25lIjpbIis4NDEyMzQ1Njc4MiJdfSwic2lnbl9pbl9wcm92aWRlciI6InBob25lIn19.0OCskQkPKq5yxku02PuBgoZMFHgMfZBVPptQaVExrWYRDrEM3uUwDrDXAWiqA6L9i54fg_7dfWBwnPvQ71g4Lzsft60_JycS0-C_kSlCBxVSlX5J8WDTwNGm6p5-QDxN2bU9fwglzmggMst-4A3tLlPLQRnttuishFKhgr40ABHX8tksNfbs626YhTiwY6vD6_Gn0k7X7jh1HsHAUUcnPZq2tCXRFUKNDmF_4lC6vc7-Cs5zHpIlKtaAXoQBRe9HYsEvYfK2tOey8T_3mDC_Eh36fcve6HCOQBt9EtFPRIUcKZgFDWPoG70t-ABk66Lr2BjejbOsBBnA9R7492t6Sg","correlation_id":"1fb572ff331346b7","user_id":"rCsti0h0G3UFfUi6CZ1b3I8Bf9R2"}'
По сути, начало перепутано:
{"auth_key":"eyJ != \xae\xfa\x9c\xb3\x8c+\x17\xfeI\xc9\xb8\x0b\x0e@\xac\r
Дайте мне знать в комментарии, если я что-то пропустил: -)