Java против Python AES PBKDF2 ⇐ JAVA
-
Anonymous
Java против Python AES PBKDF2
Я пытаюсь расшифровать некоторые значения в файле Apache Nifi (1.23.1) flow.xml.gz (или flow.json.gz) в Python . Внеся исправления в файлы Java, я нашел следующую информацию:
Поле Значение Алгоритм NIFI_PBKDF2_AES_GCM_256 Пароль 1+LFssX4whxz9lOPQ9OS7g4NvQzbCe8j двоичный, как описано в CipherPropertyEncryptor.java 697a84312aac99fbe2315f0637c960352242e26ffd3e2c33c298f06730fffa9687cb0d845f57c1a645 cipherbinary, как описано в CipherPropertyEncryptor.java 2242e26ffd3e2c33c298f06730fffa9687cb0d845f57c1a645 Соль Статическая соль NiFi Итерации 160 000 Расшифрованное значение Изменить!
При попытке написать программу дешифрования на Python я использовал https://asecuritysite.com/encryption/aes_gcm2 в качестве руководства.
У меня есть следующий код, который приводит к ошибке ValueError: проверка MAC не удалась
# https://asecuritysite.com/encryption/aes_gcm2 из Crypto.Cipher импортировать AES импортировать хеш-библиотеку из Crypto.Protocol.KDF импортировать PBKDF2 из Crypto.Hash импортировать SHA256, SHA512 # Plaintext='Изменить!' пароль = '1+LFssX4whxz9lOPQ9OS7g4NvQzbCe8j' соль = b'Статическая соль NiFi' def decrypt(зашифрованный текст, ключ, режим): (зашифрованный текст, authTag, nonce) = зашифрованный текст encobj = AES.new(ключ, режим, одноразовый номер) return(encobj.decrypt_and_verify(ciphertext, authTag)) ключ = hashlib.sha256(password.encode()).digest() # /home/nifi/nifi/nifi-commons/nifi-security-crypto-key/src/main/java/org/apache/nifi/security/crypto/key/pbkdf2/Pbkdf2DerivedKeyProvider.java говорит sha512 hmac # /home/nifi/nifi/nifi-nar-bundles/nifi-cipher-bundle/nifi-cipher-processors/src/main/java/org/apache/nifi/processors/cipher/DecryptContent.java длина ключа байт 16 ключ = PBKDF2 (пароль, соль, 16, счетчик = 160000, hmac_hash_module = SHA512) # ключ = PBKDF2(пароль, соль, 32, счетчик=160000, hmac_hash_module=SHA256) # из примера исходного кода #697a84312aac99fbe2315f0637c960352242e26ffd3e2c33c298f06730fffa9687cb0d845f57c1a645 из реального прогона, следует расшифровать в Changeit! #2242e26ffd3e2c33c298f06730fffa9687cb0d845f57c1a645 шифровальный файл из Java # в Java, IV в /home/nifi/nifi/nifi-commons/nifi-property-encryptor/src/main/java/org/apache/nifi/encrypt/KeyedCipherPropertyEncryptor.java имеет значение 697a84312aac99fbe2315f0637c96035 зашифрованный текст = (b'697a84312aac99fbe2315f0637c96035', b'2242e26ffd3e2c33c2', b'98f06730fffa9687cb0d845f57c1a645') res = расшифровать (зашифрованный текст, ключ, AES.MODE_GCM) print ("\n\nDecrypted:\t",res.decode()) Java против Python AES PBKDF2. Почему разные результаты? тоже выглядит актуальным, но без исходного кода трудно понять, в чем заключалась проблема и как она была решена.
Как исправить этот метод расшифровки, чтобы получить правильное значение?
Я пытаюсь расшифровать некоторые значения в файле Apache Nifi (1.23.1) flow.xml.gz (или flow.json.gz) в Python . Внеся исправления в файлы Java, я нашел следующую информацию:
Поле Значение Алгоритм NIFI_PBKDF2_AES_GCM_256 Пароль 1+LFssX4whxz9lOPQ9OS7g4NvQzbCe8j двоичный, как описано в CipherPropertyEncryptor.java 697a84312aac99fbe2315f0637c960352242e26ffd3e2c33c298f06730fffa9687cb0d845f57c1a645 cipherbinary, как описано в CipherPropertyEncryptor.java 2242e26ffd3e2c33c298f06730fffa9687cb0d845f57c1a645 Соль Статическая соль NiFi Итерации 160 000 Расшифрованное значение Изменить!
При попытке написать программу дешифрования на Python я использовал https://asecuritysite.com/encryption/aes_gcm2 в качестве руководства.
У меня есть следующий код, который приводит к ошибке ValueError: проверка MAC не удалась
# https://asecuritysite.com/encryption/aes_gcm2 из Crypto.Cipher импортировать AES импортировать хеш-библиотеку из Crypto.Protocol.KDF импортировать PBKDF2 из Crypto.Hash импортировать SHA256, SHA512 # Plaintext='Изменить!' пароль = '1+LFssX4whxz9lOPQ9OS7g4NvQzbCe8j' соль = b'Статическая соль NiFi' def decrypt(зашифрованный текст, ключ, режим): (зашифрованный текст, authTag, nonce) = зашифрованный текст encobj = AES.new(ключ, режим, одноразовый номер) return(encobj.decrypt_and_verify(ciphertext, authTag)) ключ = hashlib.sha256(password.encode()).digest() # /home/nifi/nifi/nifi-commons/nifi-security-crypto-key/src/main/java/org/apache/nifi/security/crypto/key/pbkdf2/Pbkdf2DerivedKeyProvider.java говорит sha512 hmac # /home/nifi/nifi/nifi-nar-bundles/nifi-cipher-bundle/nifi-cipher-processors/src/main/java/org/apache/nifi/processors/cipher/DecryptContent.java длина ключа байт 16 ключ = PBKDF2 (пароль, соль, 16, счетчик = 160000, hmac_hash_module = SHA512) # ключ = PBKDF2(пароль, соль, 32, счетчик=160000, hmac_hash_module=SHA256) # из примера исходного кода #697a84312aac99fbe2315f0637c960352242e26ffd3e2c33c298f06730fffa9687cb0d845f57c1a645 из реального прогона, следует расшифровать в Changeit! #2242e26ffd3e2c33c298f06730fffa9687cb0d845f57c1a645 шифровальный файл из Java # в Java, IV в /home/nifi/nifi/nifi-commons/nifi-property-encryptor/src/main/java/org/apache/nifi/encrypt/KeyedCipherPropertyEncryptor.java имеет значение 697a84312aac99fbe2315f0637c96035 зашифрованный текст = (b'697a84312aac99fbe2315f0637c96035', b'2242e26ffd3e2c33c2', b'98f06730fffa9687cb0d845f57c1a645') res = расшифровать (зашифрованный текст, ключ, AES.MODE_GCM) print ("\n\nDecrypted:\t",res.decode()) Java против Python AES PBKDF2. Почему разные результаты? тоже выглядит актуальным, но без исходного кода трудно понять, в чем заключалась проблема и как она была решена.
Как исправить этот метод расшифровки, чтобы получить правильное значение?
Мобильная версия