Ich mache Entschlüsselung einiger verschlüsselter Daten. Sagen wir, die Daten sind eine sehr vertrauliche Information. Die Information wird mit dem Algorithmus tripledes_cbc
verschlüsselt. Der geheime Schlüssel, der zum Verschlüsseln der Information verwendet wird, ist mit dem Algorithmus rsa
verschlüsselt.Immer Müll nach tripledes_cbc Verschlüsselung mit NoPadding Schema
Aber wenn ich versuche, die Informationen mit DESede/CBC/NoPadding
Algorithmus zu entschlüsseln, bekomme ich die ursprünglichen Daten zusammen mit einigen Garbage-Zeichen aufgefüllt an der Front und am Ende.
Wenn ich versuche, DES/CBC/PKCS5Padding
anstelle von DESede/CBC/NoPadding
zu verwenden, bekomme ich "Endblock nicht ordnungsgemäß gepolstert" Ausnahme.
Folgendes ist das Code-Snippet. Bitte lassen Sie mich wissen, was kann ich den richtigen Text ohne zusätzliche Polsterung bekommen tun:
KeyStore ks = KeyStore.getInstance("jks");
FileInputStream fis = new FileInputStream(ksFile);
ks.load(fis, "testing".toCharArray());
PrivateKey privateKey = (PrivateKey) ks.getKey("keys", "1234".toCharArray());
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] kekBytes = cipher.doFinal(Base64.decodeBase64(encKey.getBytes("UTF-8")));
SecureRandom random = new SecureRandom();
byte[] iv = new byte[8];
random.nextBytes(iv);
SecretKey key = new SecretKeySpec(kekBytes, "DESede");
Cipher cipher1 = Cipher.getInstance("DESede/CBC/NoPadding");
cipher1.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));
byte[] out = cipher1.doFinal(Base64.decodeBase64(data.getBytes("UTF-8")));
System.out.println("Data Length: " + out.length);
String result = new String(out, "UTF-8");
1. 3DES sollte nicht für neue Arbeit verwendet werden, AES ist die aktuelle symmetrische Methode zu verwenden. Aber ich schätze, das ist ein Schulprojekt, und Schulen sind ein Jahrzehnt hinter der wirklichen Welt. 2. Geben Sie ein Beispiel für die erwarteten und entschlüsselten Daten ** im Hex-Format ** an. – zaph
Offensichtlich müssen Sie herausfinden, welche Auffüllung von der Verschlüsselungsseite verwendet wurde. Verwenden Sie auch DES oder DESede? Denn 'DES/CBC/PKCS5Padding' ist keine sinnvolle Alternative zu' DESede/CBC/NoPadding'. Vielleicht meinten Sie "DESede/CBC/PKCS5Padding"? –