Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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中使用MD5进行哈希?_Java_Hash_Cryptography_Md5 - Fatal编程技术网

在Java中使用MD5进行哈希?

在Java中使用MD5进行哈希?,java,hash,cryptography,md5,Java,Hash,Cryptography,Md5,我正在创建一个程序,它将获取用户的login和password输出,并散列这些变量(login和password) 当我对登录的输出进行哈希运算时,它会工作,但当我尝试对密码的输出进行哈希运算时,它就不工作了 代码: String login; String password; login = JOptionPane.showInputDialog("Login : "); password = JOptionPane.showInputDialog("Password : "); Mes

我正在创建一个程序,它将获取用户的login和password输出,并散列这些变量(login和password)

当我对登录的输出进行哈希运算时,它会工作,但当我尝试对密码的输出进行哈希运算时,它就不工作了

代码:

String login;
String password;


login = JOptionPane.showInputDialog("Login : ");
password = JOptionPane.showInputDialog("Password : ");

MessageDigest m; 


try 
{ 
m = MessageDigest.getInstance("MD5");
m.update(login.getBytes(),0,login.length()); 
m.update(password.getBytes(),0,password.length());
BigInteger login1 = new BigInteger(1, m.digest()); 
BigInteger password1 = new BigInteger(1, m.digest());

login = String.format("%1$032X", login1); 
password = String.format("%1$032X", password1); 

JOptionPane.showMessageDialog(null,"Login : " + login + 
                "\nPassword : " + password);

//System.out.println("login : "+ login); 
//System.out.println("password : " + password);
} 
输出:

login : E9CA9D798BA364DFF16C738D03AF6668
password : D41D8CD98F00B204E9800998ECF8427E
变量登录正常,但是密码在散列时总是得到相同的结果,我想让变量密码在散列时总是得到一些不同的结果


PS:很抱歉英文不好,不是我的母语。

正如您在评论中指出的那样,您在没有重置的情况下两次调用摘要。下次使用前需要重置摘要

try
{
    m = MessageDigest.getInstance("MD5");
    m.update(login.getBytes(), 0, login.length());
    BigInteger login1 = new BigInteger(1, m.digest());
    login = String.format("%1$032X", login1);

    m.reset(); // <---- Reset before doing the password
    m.update(password.getBytes(), 0, password.length());
    BigInteger password1 = new BigInteger(1, m.digest());
    password = String.format("%1$032X", password1);

    System.out.println(login);
    System.out.println(password);
}
试试看
{
m=MessageDigest.getInstance(“MD5”);
m、 更新(login.getBytes(),0,login.length());
BigInteger login1=新的BigInteger(1,m.digest());
login=String.format(“%1$032X”,login1);

m、 reset();//正如注释中指出的,您两次调用摘要都没有重置。下次使用之前,您需要重置摘要

try
{
    m = MessageDigest.getInstance("MD5");
    m.update(login.getBytes(), 0, login.length());
    BigInteger login1 = new BigInteger(1, m.digest());
    login = String.format("%1$032X", login1);

    m.reset(); // <---- Reset before doing the password
    m.update(password.getBytes(), 0, password.length());
    BigInteger password1 = new BigInteger(1, m.digest());
    password = String.format("%1$032X", password1);

    System.out.println(login);
    System.out.println(password);
}
试试看
{
m=MessageDigest.getInstance(“MD5”);
m、 更新(login.getBytes(),0,login.length());
BigInteger login1=新的BigInteger(1,m.digest());
login=String.format(“%1$032X”,login1);

m、 reset();//我猜您是在从web元素检索密码,而不是直接提取字符串进行哈希运算。D41D8CD98F00B204E9800998ECF8427E是“无”(零长度字符流)的MD5和。通常是html(html5)密码字段足够智能,不会泄露数据,这可能就是您得到空字符串的原因。希望这有帮助。我猜您是从web元素检索密码,而不是直接提取字符串进行哈希运算。D41D8CD98F00B204E9800998ECF8427E是“无”的MD5和(长度为零的字符流)。通常在html(html5)中,密码字段足够智能,不会泄露数据,这可能就是您得到空字符串的原因。希望这对您调用
m.digest()有所帮助
连续两次…我不能只使用相同的?或者我需要创建一个新的?因为我已经尝试过,但没有成功。例如,当我创建另一个名为m1的MessageDigest时,m1将遵循m.digest()的相同结果当进行散列时。你不应该再使用MD5进行密码散列,因为它在加密方面很弱。而应该使用类似于bcrypt的东西。我知道,但这是我正在做的课程中的一节课。你正在调用
m.digest()
连续两次…我不能只使用相同的?或者我需要创建一个新的?因为我已经尝试过,但没有成功。例如,当我创建另一个名为m1的MessageDigest时,m1将遵循m.digest()的相同结果当散列时。你不应该再使用MD5进行密码散列,它的加密能力很弱。相反,使用类似bcrypt的东西。我知道,但这是我正在做的课程中的一节课。不起作用,它做的事情和我尝试使用另一个代码时发生的一样。这两个变量一起遵循相同的结果。不,你的第一个无论密码是什么,t代码始终为密码提供相同的MD5哈希值。我的代码为每个密码提供一个新哈希值。更改密码,您将获得一个新哈希值:)不起作用,它和我尝试使用另一个代码时发生的情况相同。这两个变量一起遵循相同的结果。不,无论密码是什么,您的第一个代码总是为密码提供相同的MD5哈希值。我的代码为每个密码提供一个新哈希值。更改密码,您将得到一个新哈希值:),这不会发生根本没关系。他的代码给出了相同的MD5哈希值,不管密码是什么。那根本没关系。他的代码给出了相同的MD5哈希值,不管密码是什么。