java - Java 中使用 MD5 和 Salt 进行密码加密

标签 java php encryption md5 salt

我使用相同的 MySQL 表来存储来自不同程序的密码。一种是用 Java 编写的,另一种是用 PHP 编写的。

我使用此脚本通过 PHP 保存密码:

encrypted_password= md5(md5('added_salt').md5(md5('plain_password')));

我需要像上面一样使用 MD5 和 salt 在 Java 中加密密码。我用 Java 编写代码,但它的输出不同:

       MessageDigest md = MessageDigest.getInstance("MD5");


       String salts = "a,d,d,e,d,_,s,a,l,t";

        String salttmps[] = salts.split(",");
        byte salt[] = new byte[salttmps.length];

        for (int i = 0; i < salt.length; i++) {
          salt[i] = Byte.parseByte(salttmps[i]);
        }
        md.update(salt); 
        md.update(password.getBytes());

        byte byteData[] = md.digest();


        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < byteData.length; i++) {
         sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
        } 
        password = sb.toString();

我需要更正 Java 代码并生成与 PHP 相同的输出。

最佳答案

如果您可以在问题中发布输出示例,最好重现该算法。

我想你应该这样做:

public static void main(String[] args) {

    try {
        System.out.println(md5(md5("added_salt"), md5("plain_password")));
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
}

public static String md5(String plainText) throws NoSuchAlgorithmException {
    return md5(null, plainText);
}

public static String md5(String salt, String plainText)
        throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance("MD5");

    if (salt != null) {
        md.update(salt.getBytes());
    }
    md.update(plainText.getBytes());

    byte byteData[] = md.digest();

    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < byteData.length; i++) {
        sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16)
                .substring(1));
    }
    return sb.toString();
}

md5(md5("added_salt"), md5("plain_password")) 返回 3bd9e544ab1a3d3485f07af38cc1b415

关于java - Java 中使用 MD5 和 Salt 进行密码加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24160989/

相关文章:

PHP函数不会保存变量

sql-server - 在 SQL Server 中创建主 key

java - Google 应用程序引擎分析器

java - 什么是NullPointerException,我该如何解决?

php - 使用 cURL 的 Mandrill CA SSL 错误

java - 如何让Web App中的类对象始终保持 Activity 状态?

php - RSA 安卓加密/RSA PHP 解密

java - 使用 Simplexml 生成 java 类

java - 如何保护 Java 代码免受反编译器的攻击?

php - xampp 控制面板 Apache 端口未打开