java - Java 中 MD5 的哈希值?

标签 java hash cryptography md5

我正在创建一个程序,它将获取用户输出的登录名和密码,并对这些变量(登录名和密码)进行哈希处理。

当我对登录的输出进行哈希处理时,它可以工作,但是当我尝试对密码的输出进行哈希处理时,它不起作用。

代码:

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

关于java - Java 中 MD5 的哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37377690/

相关文章:

java - 为 Oozie Java 操作的类路径中的所有 jar 捕获组、工件和版本

java - 如何使用 clojure/enlive 动态设置表行的属性类?

security - 为什么不使用 MD5 进行密码散列?

iphone - 设备上的 iPhone kccparamerror 中的 AES 加密

java - 无法在不关闭整个程序的情况下关闭 javafx 应用程序

java - 无法在 Jmockit 中使用通用返回类型模拟接口(interface)

Javascript 发布数据顺序

c++ - boost::hash/std::tr1::hash 不为复制的 const char* 返回相同的哈希值

iOS:我需要将用户的私钥 (RSA) 传输到我的应用程序。文件共享是一个好的解决方案吗?

encryption - 校验和的可视化表示算法(例如 SHA)