iT邦幫忙

1

Java MD5 加密 範例教學與用法

MD5 因為其不可逆的特性, 讓它成為現今許多工程師常用的加密方式之一

尤其在這隱私權高漲的年代, 所有個資, 卡號, 交易金流相關都會用到加密

來看個簡單的範例

public static void main(String[] args){
        String str = "helloJava";  //要加密的字串
        char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
        
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            messageDigest.update(str.getBytes("UTF-8"));
            //Hash計算, 產生128位的長整數
            byte[] bytes = messageDigest.digest();
            StringBuffer sb = new StringBuffer(bytes.length * 2);
            for(Byte b : bytes){
                //右移四位, 取字節中前四位轉換
                sb.append(hexDigits[(b >> 4) & 0x0f]);
                //取字節中後四位轉換
                sb.append(hexDigits[b & 0x0f]); 
            }
            //輸出 602965cf9dd0e80ca28269257a6aba87
            System.out.println(sb.toString());   
        } catch (Exception e) {
            e.printStackTrace();
        }
    
}

網路上有看到MD5有分32位元跟16位元, 是什麼意思呢?

其實MD5的長度原生為128bit, 也就是128個0跟1組合

但這樣的方式不易閱讀, 所以我們會轉成16進制, 每4個bit表示1個16進制

所以 128/4 = 32, 就變32位元了, 這也是大部分人用的方法。

那16位元是怎麼來的?

16位元是去掉前8位, 後8位得到的, 所以16位元的數值會跟32位元的中間部分一樣。

MD5 32位元 = 602965cf9dd0e80ca28269257a6aba87
MD5 16位元 = 9dd0e80ca2826925

尚未有邦友留言

立即登入留言