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

标签 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);
        }

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

最佳答案

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

我找到的为密码生成相同散列的解决方案是我必须从 String password = txtPassword.getPassword().toString(); 编辑到此 的一行字符串密码 = String.valueOf(txtPassword.getText());

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

感谢回复

关于java - SHA1 不会为相同的字符串输入生成相同的哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36813926/

相关文章:

mysql - 当我转到特定路线时,即使它不存在,也会呈现错误的 ejs 文件。 NodeJs

java - 制作jar文件时包括什么?

使用 Maven 的 NetBeans 中的 Java 路径

java - 如何在另一个 Activity 中使用一个 Activity 中的方法?

java - 如何从 JNI 返回枚举

java - 当我使用鼠标单击并拖动 Jframe 时如何使 Jframe 移动

php - MySQL DB 中的新行

java - 如何从.exe中提取代码或检索项目中丢失的代码?

mysql - 缓存复杂计算的数据结果

java - 构建后使用 getResourceAsStream 不起作用?