2015-09-15 49 views
0

我需要提供密碼哈希與SHA1和Base64的像下一個:如何用sha1和Base64編碼傳遞?

base64(sha1(password)) 

這裏是我嘗試了:

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 SHA1(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException { 
    MessageDigest md = MessageDigest.getInstance("SHA-1"); 
    md.update(password.getBytes("iso-8859-1"), 0, password.length()); 
    byte[] sha1hash = md.digest(); 
    return convertToHex(sha1hash); 
} 

比:

String encodedPass = Base64.encodeToString(password.getBytes(), Base64.DEFAULT); 

但這並不工作正常... 也許有一些錯誤或一些更簡單的方法來做到這一點?

回答

0

問題是下一: convertToHex(sha1hash) - 返回字符串,但Base64編碼的正確工作,我需要爲[]在這裏把字節:

Base64.encodeToString(byte[], Base64.DEFAULT); 

這樣的解決方案是非常簡單的:

public static String encodePassword(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException { 
     String result; 
     MessageDigest md = MessageDigest.getInstance("SHA-1"); 
     md.update(password.getBytes("iso-8859-1"), 0, password.length()); 
     byte[] sha1hash = md.digest(); 
     result = Base64.encodeToString(sha1hash, Base64.DEFAULT); 
     result = result.substring(0, result.length()-1); 
     return result; 
    }