2014-06-11 101 views
0

我使用相同的MySQL表来存储来自不同程序的密码。一个用Java编写,另一个用PHP编写。在Java中使用MD5和Salt进行密码加密

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

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

我需要使用MD5和盐像上面用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。

+2

你真的[不应使用'md5'(http://stackoverflow.com/questions/401656/ secure-hash-and-salt-for-php-passwords) – kero

+0

还有其他的选择吗?我已经有使用MD5的PHP应用程序。 –

+0

http://stackoverflow.com/questions/4183646/java-md5-the-php-way – cy3er

回答

1

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

我想你应该做这样的事情:

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

+0

它工作正常。非常感谢你。 –