Java SHA1没有为相同的字符串输入生成相同的哈希值?
我正忙着登录JFrame,系统将要求用户输入用户名和密码。密码使用SHA-1散列并存储在MySQL中 我遇到的问题是,对于完全相同的密码字符串,输出不一致。 我需要有一个使用SHA1的散列,它将产生相同的输出,这样我就可以根据数据库中的散列进行验证,以证明用户输入了正确的密码 这是我对sha1的编码Java SHA1没有为相同的字符串输入生成相同的哈希值?,java,mysql,netbeans,hash,sha,Java,Mysql,Netbeans,Hash,Sha,我正忙着登录JFrame,系统将要求用户输入用户名和密码。密码使用SHA-1散列并存储在MySQL中 我遇到的问题是,对于完全相同的密码字符串,输出不一致。 我需要有一个使用SHA1的散列,它将产生相同的输出,这样我就可以根据数据库中的散列进行验证,以证明用户输入了正确的密码 这是我对sha1的编码 try { String password = txtPassword.getPassword().toString(); Mess
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);
}
试试看
{
字符串密码=txtPassword.getPassword().toString();
MessageDigest md=MessageDigest.getInstance(“SHA-1”);
md.update(password.getBytes());
byte byteData[]=md.digest();
//将字节转换为十六进制格式
StringBuffer sb=新的StringBuffer();
for(int i=0;i
上面的编码是否有问题,会导致它为同一个字符串生成不同的输出
String password = txtPassword.getPassword().toString();
代码是什么?这很可能是问题所在,因为设置password=“test”将反复给出相同的结果
编辑:
试试这个:stringpassword=newstring(txtPassword.getPassword()) 我一直在尝试不同的编码,我发现问题在于从JPasswordField获取密码 我找到的解决方案为密码生成了相同的哈希值,这是我必须从
stringpassword=txtPassword.getPassword().toString()编辑的一行代码
到这个String password=String.valueOf(txtPassword.getText())代码>
我意识到问题在于将其作为字符串而不是值来读取
感谢您的回复MessageDigest.getInstance(“SHA-1”)代码>?“MD5”
听起来不像是给你SHA-1…谢谢,做对了。很抱歉,我尝试了许多不同的哈希算法。@John我用ideone测试了你的代码,看起来效果不错。您确定输入是相同的吗?(我想可能是打印出密码)谢谢你的回复。该行的原因是为了获取用户输入的密码。将从jpassword字段调用密码,并将其存储在变量password中。系统需要为此密码创建一个哈希值,如果哈希值与MySQL中的哈希值匹配,则将对用户进行身份验证。您不想将其设置为字符串,这就是getPassword返回char[]而不是字符串的原因。要处理密码,您需要使用字符,然后将数组归零。