MD5加密算法流程

  MD5:Message-Digest Algorithm 5(信息-摘要算法),屬於哈希散列算法一類,對於MD5而言,有兩個特性是很重要的,
  第一:明文數據經過散列以後的值是定長的;
  第二:任意一段明文數據,經過散列以後,其結果必須永遠是不變的。
  前者的意思是可能存在有兩段明文散列以後得到相同長度的結果,後者的意思是如果我們散列特定的數據,得到的結果一定是相同的。
  MD5的作用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被”壓縮”成一種保密的格式(就是把一個任意長度的字節串變換成一定長的(32位)十六進制數字串)。


  算法原理:對MD5算法簡要的敘述可以爲:MD5以512位分組來處理輸入的信息,且每一分組又被劃分爲16個32位子分組,經過了一系列的處理後,算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。
  在MD5算法中,首先需要對信息進行填充,使其位長對512求餘的結果等於448。因此,信息的位長(Bits Length)將被擴展至N*512+448,N爲一個非負整數,N可以是零。填充的方法如下,在信息的後面填充一個1和無數個0,直到滿足上面的條件時才停止用0對信息的填充。然後,在這個結果後面附加一個以64位二進制表示的填充前信息長度。經過這兩步的處理,信息的位長=N*512+448+64=(N+1)*512,即長度恰好是512的整數倍。這樣做的原因是爲滿足後面處理中對信息長度的要求。


  Java實現MD5過程
  1、通過單例的構造方法獲取MessageDigest實例,並指定加密算法類型;
  2、將需要加密的字符串加鹽後轉換成byte數組後進行隨機哈希過程;
  3、MessageDigest對字節數組進行摘要,得到摘要字節數組;
  4、循環遍歷生成的byte類型數組,讓其生成32位字符串,然後拼接字符串得到MD5值;


  代碼如下
  

public class MD5Util {

    /**
     * 對指定的字符串進行MD5加密處理
     * @param password   待加密的原始密碼值
     * @return MD5加鹽加密後的密碼值
     */
    public static String encodePassword(String password) {
        try {
            // 密碼加鹽處理,確保密碼更加安全
            password = password + "neuyimi";
            // 獲取MessageDigest實例,並指定加密算法類型
            MessageDigest digest = MessageDigest.getInstance("MD5");
            // 將需要加密的字符串轉換成byte數組後進行隨機哈希過程
            byte[] byteArray = password.getBytes();
            // 信息摘要對象對字節數組進行摘要,得到摘要字節數組
            byte[] md5Byte = digest.digest(byteArray);
            StringBuffer buffer = new StringBuffer();
            // 循環遍歷byte類型數組,讓其生成32位字符串
            for (byte b : md5Byte) {
                int i = b & 0xff;
                String str = Integer.toHexString(i);
                if (str.length() < 2) {
                    str = "0" + str;
                }
                buffer.append(str);
            }
            return buffer.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
}

  :MD5是不可逆的,也就是沒有對應的算法,把轉換後的MD5值逆向得到原始密碼數據;下面要說但是了,但是如果使用暴力破解,那也沒辦法,畢竟網上大神很多,保不齊大神用什麼方法就能逆向獲取到原始密碼;現在網上也有很多MD5解密工具,可以試試,簡單的MD5加密後的密碼還是可以解密的,但是如果加鹽以後,很多就破解不了啦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章