2011-09-27 155 views
0

我有一个小问题,哈希用户名和密码。我需要找到一种方法来散列与java的数据作为服务器用mysql.Here是一个MySQL散列:Android Sha1哈希用户名和密码没有正确哈希

,我试图得到同样的结果在Java中是这样的:

 String userName_input = txtUserName.getText().toString(); 
     String password_input = txtPassword.getText().toString(); 

     try { 
      String userName_hash; 
      String password_hash; 
      String username = SHA1.Sha1Hash(userName_input); 
      String password = SHA1.Sha1Hash(password_input); 
      String username1 = SHA1.Sha1Hash((username.concat(password)).substring(20, 35)); 
      String password1 = SHA1.Sha1Hash((password.concat(username)).substring(10, 35));  

      userName_hash = SHA1.Sha1Hash(username1.concat(username)); 
      password_hash = SHA1.Sha1Hash(password1.concat(password)); 

    //THE RESULT WHICH SERVER RETURNS AND THE RESULT OF JAVA HASH  
UsernameHash (fcd86e8cc9fc7596f102de7b2b922e80c6e6fac9) : dd1ed59ebab6c420d750046539fcb60e7a1f9162 
PasswordHash (b66936348bd0bd44fa44f5ca7dcceb909545e47f) : cde70a6416e061d00b4247b73c54c73fee7116ab 

但是使用这个SHA1代码,我得到的结果是不一样的在MySQL hash.I'm:

public class SHA1 { 
private static String convertToHex(byte[] data) { 
    StringBuffer buf = new StringBuffer(); 
    for (int i = 0; i < data.length; i++) { 
     int halfbyte = (data[i] >>> 4) & 0x0F; 
     int two_halfs = 0; 
     do { 
      if ((0 <= halfbyte) && (halfbyte <= 9)) 
       buf.append((char) ('0' + halfbyte)); 
      else 
       buf.append((char) ('a' + (halfbyte - 10))); 
      halfbyte = data[i] & 0x0F; 
     } while(two_halfs++ < 1); 
    } 
    return buf.toString(); 
} 

public static String Sha1Hash(String text) 
throws NoSuchAlgorithmException, UnsupportedEncodingException { 
MessageDigest md; 
md = MessageDigest.getInstance("SHA-1"); 
byte[] sha1hash = new byte[40]; 
md.update(text.getBytes("iso-8859-1"), 0, text.length()); 
sha1hash = md.digest(); 
return convertToHex(sha1hash); 
} 

}

任何想法/建议哪里是我的错误,以及如何使得哈希完全像在mysql中一样工作?

在此先感谢!

回答

0

根据您给这应该正常工作来源:

String hashUser = SHA1.Sha1Hash(username); 
      String hashPass = SHA1.Sha1Hash(password); 

      /** 
      * HASH USERNAME 
      * sha1(concat(sha1(substr(concat(sha1('username'),sha1('password')),20,35)),sha1('username'))) 
      */ 
      String userPLUSpass = hashUser+hashPass; 
      String userConcat = ""; 
      String subStringUserHash = userConcat.concat(userPLUSpass); 
      String userHashSubStr = SHA1.Sha1Hash(subStringUserHash.substring(19, 54)); 
      String luser = userHashSubStr+hashUser; 
      String uConcat = "";    
      lastUser = SHA1.Sha1Hash(uConcat.concat(luser)); 

      /** 
      * HASH PASSWORD 
      * sha1(concat(sha1(substr(concat(sha1('password'),sha1('username')),10,35)),sha1('password'))) 
      */ 
      String passPLUSuser = hashPass+hashUser; 
      String passConcat = ""; 
      String subStringPassHash = passConcat.concat(passPLUSuser); 
      String passHashSubStr = SHA1.Sha1Hash(subStringPassHash.substring(9, 44)); 
      String lpass = passHashSubStr+hashPass; 
      String pConcat = "";    
      lastPass = SHA1.Sha1Hash(pConcat.concat(lpass));