SHA1不会为相同的字符串输入生成相同的哈希值?

时间:2016-04-23 17:11:56

标签: java mysql netbeans hash sha

我正忙于登录JFrame,系统会要求用户输入用户名和密码。使用SHA-1对密码进行哈希处理并存储在MySQL

我遇到的问题是输出对于完全相同的密码字符串不一致。 我需要使用SHA1来生成相同的输出,以便我可以根据数据库中的哈希验证它,以证明用户输入了正确的密码。

这是我对sha1的编码。

try
        {
            String password = txtPassword.getPassword().toString();

            MessageDigest md = MessageDigest.getInstance("SHA-1");
            md.update(password.getBytes());

            byte byteData[] = md.digest();

            //convert the byte to hex format
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < byteData.length; i++) {
             sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
            }

            System.out.println("Hex format : " + sb.toString());


        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(this, e);
        }

上面的编码是否存在问题会导致它为同一个字符串生成不同的输出。

2 个答案:

答案 0 :(得分:1)

String password = txtPassword.getPassword().toString();

这是什么代码?这很可能是问题所在,因为设置password =“test”会反复给你相同的结果。

编辑:

试试这个:String password = new String(txtPassword.getPassword());

答案 1 :(得分:1)

我一直在尝试不同的编码,我发现问题在于从JPasswordField获取密码。

我为解密码生成相同哈希值的解决方案是我必须从String password = txtPassword.getPassword().toString();编辑到此String password = String.valueOf(txtPassword.getText());

的一行

我意识到问题在于将其作为字符串读取而不是作为值。

感谢您的回复