1. 程式人生 > >Java 生成16/32位 MD5

Java 生成16/32位 MD5

注意!網上廣為流傳的MD5計算的版本,與標準MD5計算結果不同(原因可能是編碼方式的不同)。請注意甄別。

以下程式碼是經過測試的正確版本。

private static final char HEX_DIGITS[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

private static String toHexString(byte[] b) {
    StringBuilder sb = new StringBuilder(b.length * 2);
    for (int i = 0; i < b.length; i++) {
        sb.append(HEX_DIGITS[(b[i] & 0xf0) >>> 4]);
        sb.append(HEX_DIGITS[b[i] & 0x0f]);
    }
    return sb.toString();
}

public static String Bit32(String SourceString) throws Exception {
    MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
    digest.update(SourceString.getBytes());
    byte messageDigest[] = digest.digest();
    return toHexString(messageDigest);
}

public static String Bit16(String SourceString) throws Exception {
    return Bit32(SourceString).substring(8, 24);
}