Как создать Генератор паролей с PBKDF2 и вновь появившийся пароль при запросе того же пароля - PullRequest
0 голосов
/ 30 июня 2018
    import java.io.UnsupportedEncodingException; 


    import javax.swing.JOptionPane;

import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;

import javax.crypto.SecretKey;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.spec.PBEKeySpec;
    import java.security.NoSuchAlgorithmException;
    import java.security.spec.InvalidKeySpecException;

    public class PasswortGen
    {
    static final int SOLL_LAENGE_EINGABE = "laenge".length();
    static final int POSITION_DOPPELPUNKT = 2;
    static final String Masterpasswort = JOptionPane.showInputDialog("Geben Sie Ihr Masterpasswort ein");
    static final String Versionsnummer = "Geben Sie die Website, sowie die aktuelle Versionsnummer ein";
    static final String Kennung = "Geben Sie Ihre Kennung ein";
    static final String laenge = JOptionPane.showInputDialog("Geben Sie die gewünschte Laenge ein (16 - Empfohlen)");



    public static void main(String[] args) throws UnsupportedEncodingException { /*
         * Die main1-Methode kombiniert alle Methoden zu Erstellung eines Passwords und leifert diesen als String, mit Hilfe der Konsole, aus.
         */



        String password = "pass"; //Dem Datentyp String mit der Erkennung password wird der Wert "pass" zugewiesen

        String salt = "1234";//Dem Datentyp String mit der Erkennung salt wird der Wert "1234" zugewiesen

        int iterations = 10000;//Dem Datentyp Int mit der Erkennung iterations wird der Wert 10000 zugewiesen

        int keyLength = 16 ; //Dem Datentyp Int mit der Erkennung keyLength wird der Wert 16 zugewiesen, also das Passwort hat eine Lönge von 16

        char[] passwordChars = password.toCharArray(); //Dem Datentyp Char[] mit der Erkennung passwordChars weist die Charakters zu.

        byte[] saltBytes = salt.getBytes(); //Dem Datentyp byte mit der Erkennung saltBytes wird der Wert von saltBytes nachgefragt.



        byte[] hashedBytes = hashPassword(passwordChars, saltBytes, iterations, keyLength); // WEIS ICH NICHT

        String hashedString = HexBin.encodeHexString(hashedBytes); // WEIS ICH NICHT



        System.out.println(hashedString); //Die Konsole liefert den String "hashedString".
    }

/*
* Die main1-Methode kombiniert alle Methoden zu Erstellung eines Passwords und leifert diesen als String, mit Hilfe der Konsole, aus.
*/



            public static byte[] hashPassword( final char[] password, final byte[] salt, final int iterations, final int keyLength ) {



                try {

                    SecretKeyFactory skf = SecretKeyFactory.getInstance( "PBKDF2WithHmacSHA512" );

                    PBEKeySpec spec = new PBEKeySpec( password );

                    SecretKey key = skf.generateSecret( spec );

                    byte[] res = key.getEncoded( );

                    return res;

                } catch ( NoSuchAlgorithmException | InvalidKeySpecException e ) {

                    throw new RuntimeException( e );

                }

            }


    }

Мне действительно нужна помощь с этим кодом. Был бы очень признателен, чтобы получить это работает. Не обращайте внимания на эти комментарии, я сделал их на немецком языке.

I have to put in a password( like water), that will be encrypted into a password which i should set the length of. 

Так что после этого я должен снова ввести воду, и тот же пароль, к которому он был зашифрован, должен снова появиться тот же.

Thanks

ADADADADDADADADADADDADADADADDDADADDADADDADADADADADADADDADADADADADDADADADADDDADADDADADDADADADADADADADDADADADADADDADADADADDDADADDADADDADADADADADADADDADADADADADDADADADADDDADADDADADDADADADADADADADDADADADADADDADADADADDDADADDADADDADADADADADADADDADADADADADDADADADADDDADADDADADDADADADADADADADDADADADADADDADADADADDDADADDADADDADADAD

...