Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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 SHA1没有为相同的字符串输入生成相同的哈希值?_Java_Mysql_Netbeans_Hash_Sha - Fatal编程技术网

Java 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

我正忙着登录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);
        }
试试看
{
字符串密码=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[]而不是字符串的原因。要处理密码,您需要使用字符,然后将数组归零。