Passwörter Ver- & Entschlüsseln

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Passwörter Ver- & Entschlüsseln

    Hallo,

    wie kann ich ein Passwort ver- und entschlüsseln? Mit einem MD5-Hash komme ich nicht weiter, da die PW's verschlüsselt in der DB gespeichert werden sollen, und sobald ein Passwort angefordert wurde, soll dieses wieder entschlüsselt werden.

    Ich hoffe ihr könnt mir helfen.

    Gruß logitechMb
  • logitechMb wrote:

    Hallo,

    wie kann ich ein Passwort ver- und entschlüsseln? Mit einem MD5-Hash komme ich nicht weiter, da die PW's verschlüsselt in der DB gespeichert werden sollen, und sobald ein Passwort angefordert wurde, soll dieses wieder entschlüsselt werden.

    Ich hoffe ihr könnt mir helfen.

    Gruß logitechMb
    Also per JAVA versteht sich ;)
  • Was genau willst du mit den Passwörtern machen?
    Normalerweise verschlüsselt man Passwörter nicht sondern kodiert sie nur (siehe dazu Unterschied Kodierung - Verschlüsselung)

    Der Mechanismus beim Kodieren wäre so:
    1. Passwort kodiert (md5 oder ähnlich) speichern
    2. Beim Abfragen des Passworts wird das Passwort vorher kodiert und dann erst verglichen
    Man vergleicht also nicht direkt die Passwörter sondern deren Kodierung.

    Der Sinn einer Verschlüsselung ist, dass es nicht einfach entschlüsselbar ist. Man benötigt bei den meisten Algorithmen ein Passwort um die eigentliche Nachricht (also hier das Passwort) zu entschlüsseln. (Klingt etwas verwirrend in dem Kontext)
    Wozu willst du also eine Verschlüsselung nutzen oder meintest du doch eher eine Kodierung?
  • Hi,

    Also ein Passwort mit md5 verschlüsseln kannst du damit;

    download.oracle.com/javase/6/d…curity/MessageDigest.html

    Entschlüsseln geht nicht.

    Das Prinzip ist so das man nur verschlüsselt/hashed und dann den übermittelten hashcode mit dem gespeicherten vergleicht.
    EIn entschlüsseln ist nicht gewollt da dies sonst ja jeder entschlüsseln könnte und der somit die verschlüsselung sinnfrei währe.

    Dies ist auch der Grund dafür das alle gängigen Webseiten dir nur anbieten dein Passwort neu zu setzen und dir an deine Mailadresse zu senden, nicht aber dein Passwort zu entschlüsseln!

    lg
    Reappy
  • Ich will mir ja kein Hash machen und denn mit dem Eintrag in der DB vergleichen.
    Ich habe ein Tool geschrieben, dass Filterregeln erstellt und diese dann auf einem beliebigen MailServer ausführt. Diese Filter enthalten natürlich auch den Login für den gewünschten MailServer. Da komme ich leider mit einem Hash nicht weiter.

    Gruß logitechMb
  • oha, hab das eine Wort überlesen.

    Dann suchst du das nehme ich an:
    bouncycastle.org/

    Sources und java docs kannst mit herunterladen. bei google findest auch noch ein paar Tuts die beim einstieg helfen

    edit:

    Source Code

    1. public class MainClass {
    2. public static void main(String[] args) throws Exception {
    3. Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    4. byte[] input = " Text der verschluesselt wird ".getBytes();
    5. byte[] keyBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
    6. 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17 };
    7. SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
    8. Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding", "BC");
    9. System.out.println("input text : " + new String(input));
    10. // encryption pass
    11. byte[] cipherText = new byte[input.length];
    12. cipher.init(Cipher.ENCRYPT_MODE, key);
    13. int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
    14. ctLength += cipher.doFinal(cipherText, ctLength);
    15. System.out.println("cipher text: " + new String(cipherText) + " bytes: " + ctLength);
    16. // decryption pass
    17. byte[] plainText = new byte[ctLength];
    18. cipher.init(Cipher.DECRYPT_MODE, key);
    19. int ptLength = cipher.update(cipherText, 0, ctLength, plainText, 0);
    20. ptLength += cipher.doFinal(plainText, ptLength);
    21. System.out.println("plain text : " + new String(plainText) + " bytes: " + ptLength);
    22. }
    23. }
    Display All

    The post was edited 4 times, last by reappy ().