2012-04-30 70 views
1

我试图做一个方法编码到SHA(128,256,512)有或没有盐。对无盐的方法是哈希Java或无盐

private static String crypt(String chain, String method) { 
    MessageDigest md; 
    try { 
     md = MessageDigest.getInstance(method); 
     md.update(chain.getBytes("UTF-8")); 
     byte[] mb = md.digest(); 
     String out = ""; 
     for (int i = 0; i < mb.length; i++) { 
      byte temp = mb[i]; 
      String s = Integer.toHexString(new Byte(temp)); 
      while (s.length() < 2) { 
       s = "0" + s; 
      } 
      s = s.substring(s.length() - 2); 
      out += s; 
     } 
     return out; 

    } catch (Exception e) { 
     System.out.println("ERROR: " + e.getMessage()); 
    } 
    return null; 
} 

其中,该方法可以是

private final static String MD5="MD5"; 
private final static String SHA_128="SHA-1"; 
private final static String SHA_256="SHA-256"; 
private final static String SHA_384="SHA-384"; 

但希望我也有一种方法隐窝(字符串链,字符串盐,字符串方法)。我试图改变行:

byte[] mb=md.digest(salt.getBytes("UTF-8"); 

但它不返回正确的链(与PHP的通话hash_hmac(“SHA256”,“通”,“盐”)相比)。我该如何解决这个问题,或者我可以在哪里找到一种可选盐的算法?谢谢

回答