Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当哈希存储的密码时,generateHash方法给出arrayIndexOutOfBounds_Java_Database_Hash_Salt - Fatal编程技术网

Java 当哈希存储的密码时,generateHash方法给出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

我试图散列一个数据库中存储的密码,但我一直得到一个arrayIndexOutOfBounds错误

我调用
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应用程序中的用户创建一个登录页面,唯一的方法是对他们输入的密码执行相同的哈希方法,并将其与存储的密码进行比较,如果输入的密码哈希和存储的密码哈希匹配,则允许访问…您认为这足够吗?