我试图散列数据库中存储的密码,但我一直收到arrayIndexOutOfBounds错误。
我打电话给signup("Test","password")
,输出是测试35。有人能给我指正确的方向吗?谢谢!
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();
}
您缺少一些十六进制数字,因此数组索引(预期长度为16)失败。这个
char [] digits = {'0','1','2','3','4','5','6','a','b','c','d','e','f'};
应该包括像一样的7,8和9
char [] digits = {'0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f'};
您的数组索引将越界。您正试图访问一个仅包含13个元素的数组的第16个元素。
我怀疑你只是漏掉了数字数组中的7、8和9。
char [] digits = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};