Ersten bytes fehlerhaft nach Java AES/CBC-Entschlüsselung

Was ist falsch an dem folgenden Beispiel?

Das problem ist, dass der erste Teil der entschlüsselten Zeichenfolge ist Unsinn. Jedoch der rest ist in Ordnung, ich bekomme...

Result: eB6OgeS��i are you? Have a nice day.
@Test
public void testEncrypt() {
  try {
    String s = "Hello there. How are you? Have a nice day.";

    //Generate key
    KeyGenerator kgen = KeyGenerator.getInstance("AES");
    kgen.init(128);
    SecretKey aesKey = kgen.generateKey();

    //Encrypt cipher
    Cipher encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    encryptCipher.init(Cipher.ENCRYPT_MODE, aesKey);

    //Encrypt
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    CipherOutputStream cipherOutputStream = new CipherOutputStream(outputStream, encryptCipher);
    cipherOutputStream.write(s.getBytes());
    cipherOutputStream.flush();
    cipherOutputStream.close();
    byte[] encryptedBytes = outputStream.toByteArray();

    //Decrypt cipher
    Cipher decryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    IvParameterSpec ivParameterSpec = new IvParameterSpec(aesKey.getEncoded());
    decryptCipher.init(Cipher.DECRYPT_MODE, aesKey, ivParameterSpec);

    //Decrypt
    outputStream = new ByteArrayOutputStream();
    ByteArrayInputStream inStream = new ByteArrayInputStream(encryptedBytes);
    CipherInputStream cipherInputStream = new CipherInputStream(inStream, decryptCipher);
    byte[] buf = new byte[1024];
    int bytesRead;
    while ((bytesRead = cipherInputStream.read(buf)) >= 0) {
        outputStream.write(buf, 0, bytesRead);
    }

    System.out.println("Result: " + new String(outputStream.toByteArray()));

  } 
  catch (Exception ex) {
    ex.printStackTrace();
  }
}
  • VERWENDEN SIE KEINE ANTWORT AUF DIESE FRAGE IM ERNST ! Alle Beispiel-in dieser Frage sind anfällig für padding oracle und sind insgesamt sehr schlechte Kryptographie-Nutzung. Sie präsentieren Ihr ernsthafte Kryptographie Sicherheitslücke in Ihrem Projekt, indem Sie das Codefragment unten.
  • Hi @HoLyVieR, könnten Sie ein Beispiel geben für eine bessere Kryptographie-Algorithmus? Es ist wahr, was Sie sagen, aber ich habe festgestellt, das Artikel meri-Zeug.blogspot.com.ar/2012/04/..., die erklärt, wie Sie zu überwinden Polsterung oracle und erläutert, einen anderen Schwachstellen
  • Sie sollte nicht entwickeln Sie Ihre eigenen Verschlüsselungs-Bibliothek in den ersten Platz. Durch die Verwendung der code, den Sie entwickeln Ihre eigenen Kryptographie-Bibliothek. Tun Sie dies nicht und verwenden Sie ein high-level-API, die Ihre Rahmen liefert oder verwenden Sie eine Bibliothek, die bieten high-level-API.
  • In Bezug auf die folgenden Zitate: "Man sollte nicht entwickeln Sie Ihre eigenen Verschlüsselungs-Bibliothek" und "verwenden Sie ein high-level-API, die Ihr framework bietet." Niemand hier ist die Entwicklung eigener Kryptographie-Bibliothek. Wir sind einfach mit der bereits vorhandenen, high-level-API, das java-framework bietet. Sie sir sind Wild ungenau.
  • Sie sind definitiv nicht "high level cryptography" - API. Als eine gute Faustregel, wenn Sie eingeben oder kopieren/einfügen AES, Sie sind nicht mit einem high-level-Kryptographie-API. Richtig Montage AES mit dem richtigen Algorithmus, um zu verhindern, dass die kryptographischen Angriff ist schwer, und Sie sollten es vermeiden, es zu tun, wenn Sie haben keine Erfahrung in der Kryptographie. Du bist nur shooting selbst in den Fuß, ohne es zu merken.
  • Fair genug Punkt über unsichere Beispiele, fühlen Sie sich frei, um einen Kommentar zu hinterlassen. Soweit diese Frage geht, ich war immer gestartet und brauchte nur etwas Hilfe mit einer konkreten Frage. Gute Entwickler werden die notwendigen Untersuchungen, wie sicher etwas ist, schlechten Entwickler nicht.
  • Nur weil Sie beide einverstanden sind, bedeutet nicht, dass Sie beide richtig sind. Gute Entwickler kennen den Unterschied zwischen der Verpackung eines high-level-API und umschreiben einer low-level-API. Gut Leser wird bemerken, dass der OP fragte nach einem "einfachen java-AES-verschlüsseln/entschlüsseln-Beispiel" und das ist genau das, was er bekam. Ich weiß auch nicht einverstanden mit den anderen Antworten, das ist, warum ich geschrieben eine Antwort auf meine eigenen. Vielleicht haben Sie Jungs sollten versuchen, die gleiche und erleuchte uns alle mit Ihrem know-how.
  • Ich habe angefangen, eine Diskussion auf Meta statt. Fühlen Sie sich frei, beitragen. Beachten Sie, dass ich nicht darüber einig, was eigentlich gefragt. Ich legte die tatsächliche Frage unter den mitgelieferten Beispiel-code in die Frage (die ich nicht Bearbeiten Sie die Frage selbst).
  • danke für den link. Ich habe bearbeitet Sie meine post.
  • Ich habe "Sie sollte nicht entwickeln Sie Ihre eigenen Verschlüsselungs-Bibliothek in den ersten Platz". Ernst Folgen Sie diesem Rat. Ihr framework (und auch viele library) geben Sie Weg, um Daten zu verschlüsseln, ohne zu wählen, Verschlüsselung und cipher-Modus. Verwenden Sie Sie ! Die low-level-API von Java haben viele Vorbehalte, die zu lange zu erklären, die in einem der Kommentare.
  • Das ist wirklich die absurdeste Sache, die ich je gelesen habe auf SO! Wer bist du den Leuten sagen, was Sie können und können sich nicht entwickeln?
  • Ich sehe immer noch keine Beispiele @HoLyVieR. Mal sehen, einige, oder Verweise auf Bibliotheken? Nicht konstruktiv bei allen.

InformationsquelleAutor TedTrippin | 2013-03-21
Schreibe einen Kommentar