我正忙于登录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);
}
上面的编码是否存在问题会导致它为同一个字符串生成不同的输出。
答案 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());
我意识到问题在于将其作为字符串读取而不是作为值。
感谢您的回复