Wie kann ich in Python verschlüsseln und in Java entschlüsseln?

Ich versuche, einige Daten in einem Python-Programm zu verschlüsseln und es zu speichern, dann entschlüsseln Sie diese Daten in einem Java-Programm. In Python verschwinde ich es so:

from Crypto.Cipher import AES KEY = '12345678901234567890123456789012' def encrypt(data): cipher = AES.new(KEY, AES.MODE_CFB) return cipher.encrypt(data) 

Und in Java, ich entschlüsseln es so:

 import java.security.*; import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; public class Encryption { private static byte[] KEY = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2' }; public static byte[] decrypt(byte[] data) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { Cipher c = Cipher.getInstance("AES/CFB/NoPadding"); Key key = new SecretKeySpec(KEY, "AES"); c.init(Cipher.DECRYPT_MODE, key); return c.doFinal(data); } } 

Aber ich bekomme Exception in thread "main" java.security.InvalidKeyException: Illegal key size or default parameters . Klar, ich mache etwas falsch Aber was?

3 Solutions collect form web for “Wie kann ich in Python verschlüsseln und in Java entschlüsseln?”

Der Grund, warum Sie ein Problem haben, ist, weil die Sicherheitsrichtlinie Ihre Schlüsselgröße auf 128-Bit begrenzt und Sie versuchen, einen 256-Bit-Schlüssel zu verwenden (benötigen Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files).

Schau dir diese Diskussion an und du wirst wahrscheinlich bemerken, dass du ein ähnliches Problem hast. Ich hatte tatsächlich das gleiche Problem auf meiner Maschine. Nach der Aktualisierung der Sicherheitspolitik konnte ich Ihren Code ausführen. Auch ich denke, du solltest die folgende Änderung c.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(new byte[16])); Sie fehlen den Initialisierungsvektor für den CFB-Modus. Wenn der entschlüsselte Wert nicht korrekt ist, überprüfen Sie, wie Sie die Tasten initialisieren.

Ich würde dringend empfehlen, eine Cross-Language-Krypto-API dafür zu verwenden. Ich bin ein großer Fan von Keyczar , und es passiert einfach nur Java und Python Bibliotheken. Die API ist so einfach wie:

 public String encrypt(String data) public String decrypt(String data) 

Sowohl in Java als auch in Python .

  • Python 2 String Literale wie 'abc' und "abc" sind ASCII.
  • Python 2 String Literale wie u'abc 'und u "abc" sind Unicode.
  • Python 3 String Literale wie 'abc' und "abc" sind Unicode.
  • Python 3 String-Literale wie b'abc 'und b "abc" sind ein Bytes-Typ.

Java verwendet standardmäßig Unicode, ähnlich wie Python 3.

Für interlanguage, interoperable crypto, können Sie sich aus https://code.google.com/p/keyczar/ . Es gibt einfache Beispiele für seine Verwendung auf dieser Seite.

  • Alte Python Hashing von links nach rechts - warum ist es schlecht?
  • Python Caesar Cipher Decoder
  • Python AES Entschlüsselung
  • Python crypt in OSX
  • Wie kann ich bcrypt / scrypt auf appengine für Python verwenden?
  • Obfuscate Strings in Python
  • Entschlüsseln einer Datei in einen Stream und Lesen des Streams in Pandas (hdf oder stata)
  • Python oder LibreOffice Save xlsx Datei mit Passwort verschlüsselt
  • Ist es möglich, einen 100% sicheren virtuellen privaten Server zu haben?
  • Vigenere Chiffre - nicht korrekte Werte hinzufügen
  • Was ist der Unterschied zwischen Blowfish und Blowfish-Compat?
  • Python ist die beste Programmiersprache der Welt.