Java 当哈希存储的密码时,generateHash方法给出arrayIndexOutOfBounds
我试图散列一个数据库中存储的密码,但我一直得到一个arrayIndexOutOfBounds错误 我调用Java 当哈希存储的密码时,generateHash方法给出arrayIndexOutOfBounds,java,database,hash,salt,Java,Database,Hash,Salt,我试图散列一个数据库中存储的密码,但我一直得到一个arrayIndexOutOfBounds错误 我调用signup(“Test”,“password”),输出是test35。。谁能给我指一下正确的方向,谢谢 public static void signup(String username, String password) { String saltedPassword = SALT + password; String hashedPassword = generateHa
signup(“Test”,“password”)
,输出是test35。。谁能给我指一下正确的方向,谢谢
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();
}
publicstaticvoid注册(字符串用户名、字符串密码){
字符串saltedPassword=SALT+密码;
字符串hashedPassword=generateHash(saltedPassword);
DB.put(“用户名”,哈希密码);
}
公共静态字符串生成器哈希(字符串输入){
StringBuilder哈希=新的StringBuilder();
试一试{
MessageDigest sha=MessageDigest.getInstance(“sha-1”);
byte[]hashedBytes=sha.digest(input.getBytes());
字符[]位={0'、'1'、'2'、'3'、'4'、'5'、'6'、'a'、'b'、'c'、'd'、'e'、'f'};
对于(intidx=0;idx>4]);
hash.append(digits[b&0x0f]);//缺少一些十六进制数字,因此数组索引(预期长度为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'};
谢谢!我正在尝试为web应用程序中的用户创建一个登录页面,唯一的方法是对他们输入的密码执行相同的哈希方法,并将其与存储的密码进行比较,如果输入的密码哈希和存储的密码哈希匹配,则允许访问…您认为这足够吗?