2016-04-11 28 views
-1

Ich versuche, ein Passwort für den Speicher in einer Datenbank zu hash, ich bekomme aber immer einen ArrayIndexOutOfBounds Fehler.Wenn Hash-Passwort für den Speicher generateHash-Methode geben ArrayIndexOutOfBounds

Ich rufe signup("Test","password") und der Ausgang ist Test 35 .. kann mir jemand in die richtige Richtung bitte, danke!

public static void signup(String username, String password) { 
    String saltedPassword = SALT + password; 
    String hashedPassword = generateHash(saltedPassword); 
    DB.put("username", hashedPassword); 
} 

public static String generateHash(String input){ 
    StringBuilder hash= new StringBuilder(); 
    try { 
     MessageDigest sha = MessageDigest.getInstance("SHA-1"); 
     byte[] hashedBytes = sha.digest(input.getBytes()); 
     char [] digits = {'0','1','2','3','4','5','6','a','b','c','d','e','f'}; 
     for (int idx = 0; idx<hashedBytes.length; idx++) { 
      byte b = hashedBytes[idx]; 
      hash.append(digits[(b & 0xf0)>>4]); 
      hash.append(digits[b & 0x0f]); //<<<<<<<------ Error on this line. 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return hash.toString();  
} 

Antwort

4

Ihnen fehlen einige Hexadezimalziffern, sodass die Arrayindizes (bei der erwarteten Länge 16) fehlschlagen. Diese

char [] digits = {'0','1','2','3','4','5','6','a','b','c','d','e','f'}; 

sollte umfassen 7,8 und 9 wie

char [] digits = {'0','1','2','3','4','5','6','7','8','9', 
     'a','b','c','d','e','f'}; 
+0

Danke! Ich versuche, eine Login-Seite für einen Benutzer in einer Web-Anwendung, die einzige Möglichkeit, wie ich es tun, ist die gleiche Hash-Methode zu einem Passwort führen Sie eingeben und vergleichen Sie es mit dem gespeicherten, wenn der eingegebene Passwort-Hash und gespeicherten Passwort Hash Match dann Zugriff erlauben ... Denken Sie, das wäre ausreichend? – Chance212

+0

@ Chance212 [Ja] (http://stackoverflow.com/a/20832047/2970947). –

0

Ihr Array-Index außerhalb der Grenzen sein wird. Sie versuchen, auf das 16. Element eines Arrays zuzugreifen, das nur 13 Elemente enthält.

Ich vermute, Sie haben einfach 7, 8 und 9 von Ihrem Ziffern-Array verpasst.

char [] digits = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};