在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    MD5算法原理實現(xiàn)以及常用方法匯總

    MD5算法原理實現(xiàn)以及常用方法匯總

    原文鏈接:https://juejin.cn/post/7108546254543519781

    MD5加密簡介

    哈希算法又稱散列算法,是將任何數(shù)據(jù)轉(zhuǎn)換成固定長度的算法的統(tǒng)稱。 從本質(zhì)上講,MD5也是一種哈希算法,其輸出是生成128位的輸出結(jié)果。 如果輸入兩個不同的明文,就會輸出兩個不同的輸出值,并且根據(jù)輸出值,不能得到原始的明文,這個過程是不可逆的。

    MD5加密原理

    MD5算法對512位報文的輸入信息進行處理,每個報文被分成16個32位報文。 經(jīng)過一系列處理后,算法的輸出由4個32位的數(shù)據(jù)包組成,這些數(shù)據(jù)包能聯(lián)生成一個128位的哈希值。

    在MD5算法中,信息的填寫方式是這樣的:消息后面跟著一個1,然后是無數(shù)個0,直到512字節(jié)的剩余數(shù)等于448 (n*512) + 448。 為什么剩下的是448,因為剩下的512-448是64位,表示填充前的消息長度。 加上剩下的64位,(n+1)乘以512,也就是512的整數(shù)倍。

    然后循環(huán)通過link變量獲得結(jié)果。 MD5包含四個32位整數(shù)參數(shù),稱為鏈接變量:A=0x01234567, B= 0x89ABCdef, C= 0xFeDCba98, D=0x76543210。 一旦設置好四個鏈接變量,算法就開始了四輪循環(huán)。 具體的內(nèi)部計算是關(guān)于數(shù)學的。如果你感興趣,你可以自己理解。這里沒有更多的解釋。

    MD5加密常用方法

    /** * 用MD5算法進行加密 * @param str 需要加密的字符串 * @return MD5加密后的結(jié)果 * @throws UnsupportedEncodingException */ public static String encodeMD5String(String str) { return getMD5(str); }復制代碼 /** * MD5編碼方法, 該方法存在漏洞,特殊情況下編碼后的字符串只有31位長度 * @param str * @param method * @return * @throws UnsupportedEncodingException */private static String encode(String str, String method) throws UnsupportedEncodingException { MessageDigest md = null; String dstr = null; try { md = MessageDigest.getInstance(method); md.update(str.getBytes(“UTF-8”)); dstr = new BigInteger(1, md.digest()).toString(16); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return dstr; }復制代碼/** * MD5編碼方法 * @param message * @return */ public static String getMD5(String message) { MessageDigest messageDigest = null; StringBuffer md5StrBuff = new StringBuffer(); try { messageDigest = MessageDigest.getInstance(“MD5”); messageDigest.reset(); messageDigest.update(message.getBytes(“UTF-8”)); byte[] byteArray = messageDigest.digest(); for (int i = 0; i < byteArray.length; i++) { if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i])); else md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i])); } } catch (Exception e) { throw new RuntimeException(); } return md5StrBuff.toString().toUpperCase();//字母大寫 } 復制代碼 /** * 加密 * @param content * @return */ public static String encrypt(String content) { String password = "12345678dd"; byte[] encryptResult = encrypt(content, password); String encryptResultStr = parseByte2HexStr(encryptResult); return encryptResultStr; }復制代碼/** * 加密 * @param content * @param password * @return */ public static String encryptStr(String content, String password) { byte[] encryptResult = encrypt(content, password); return parseByte2HexStr(encryptResult); }復制代碼/** * 解密 * @param encryptResultStr * @return * @throws UnsupportedEncodingException */ public static String decrypt(String encryptResultStr) throws UnsupportedEncodingException { String password = "12345678dd"; byte[] decryptFrom = parseHexStr2Byte(encryptResultStr); byte[] decryptResult = decrypt(decryptFrom, password); // 解密內(nèi)容進行解碼 String result = new String(decryptResult, UTF8); return result; }復制代碼/** * 解密 * @param encryptStr * @param password * @return * @throws UnsupportedEncodingException */ public static String decryptStr(String encryptStr, String password) throws UnsupportedEncodingException {byte[] decryptFrom = parseHexStr2Byte(encryptStr);byte[] decryptResult = decrypt(decryptFrom, password);// 解密內(nèi)容進行解碼return new String(decryptResult, UTF8); }

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年6月15日 12:58
    下一篇 2022年6月15日 12:58

    相關(guān)推薦

    • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應該怎么發(fā))

      對于微商朋友來說,朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經(jīng)營一個朋友圈,有的微商看起來逼格滿滿,實際效果也不錯;而有的卻動都不動就被屏蔽甚至拉黑…

      2022年11月27日
    • 存儲過程語法(sql server存儲過程語法)

      今天小編給各位分享存儲過程語法的知識,其中也會對sql server存儲過程語法進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧! oracle存儲過程基本語法…

      2022年11月26日
    • 《寶可夢朱紫》夢特性怎么獲得?隱藏特性獲取方法推薦

      寶可夢朱紫里有很多寶可夢都是擁有夢特性會變強的寶可夢,很多玩家不知道夢特性怎么獲得,下面就給大家?guī)韺毧蓧糁熳想[藏特性獲取方法推薦,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 …

      2022年11月25日
    • 《寶可夢朱紫》奇魯莉安怎么進化?奇魯莉安進化方法分享

      寶可夢朱紫中的奇魯莉安要怎么進化呢?很多玩家都不知道,下面就給大家?guī)韺毧蓧糁熳掀骠斃虬策M化方法分享,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 奇魯莉安進化方法分享 奇魯莉安…

      2022年11月25日
    • 百度關(guān)鍵詞快速排名的4大原理解析(百度怎么刷關(guān)鍵詞)

      近期百度公告驚雷算法2.0,升級之快還是第一次吧,看來百度對于刷點擊行為是零容忍了。之前尹華峰SEO技術(shù)博客介紹過一篇如何使用刷點擊工具,其實市面上有很多這類SEO快速排名的軟件,…

      2022年11月25日
    • 博客營銷的3大優(yōu)勢解析(博客營銷怎么做)

      不知不覺已經(jīng)寫了24篇文章,加上這篇是第25篇了,都是自己這幾年來用過的營銷方法,如果遇到有些不懂的,我會咨詢我的朋友和同事幫忙,盡量讓每一篇有價值,哪怕是對大家有一點點幫助也行,…

      2022年11月25日
    • 淘寶直播開通后帶貨鏈接怎么做(淘寶直播需要開通淘寶店鋪嗎)

      直播帶貨無論是對于商家來說還是主播收益都是非??捎^的,所以不少平臺都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開通后帶貨鏈接怎么做?下面小編為大家?guī)硖詫氈辈ラ_通后帶…

      2022年11月24日
    • 《寶可夢朱紫》暴飛龍怎么抓?暴飛龍獲得方法

      寶可夢朱紫暴飛龍位置在哪?在游戲中,很多玩家還不清楚暴飛龍具體要怎么樣獲得,其實獲得方法很簡單,暴飛龍直接是沒得抓的,需要玩家從寶貝龍進化得到,下面一起來看一下寶可夢朱紫暴飛龍獲得…

      2022年11月23日
    • 《寶可夢朱紫》布土撥怎么進化?布土撥進化方法介紹

      寶可夢朱紫中,不同的寶可夢有不同的進化方法,其中布土撥的進化方法是比較特殊的。很多玩家不知道寶可夢朱紫布土撥怎么進化,下面就帶來寶可夢朱紫布土撥進化方法介紹,一起來看看吧,希望能幫…

      2022年11月23日
    • 《寶可夢朱紫》薄荷怎么獲得?薄荷獲得方法

      寶可夢朱紫中薄荷有改變寶可夢的屬性或性格等效果,很多玩家想知道寶可夢朱紫薄荷怎么獲得,下面就帶來寶可夢朱紫薄荷獲得方法,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 薄荷獲得方法…

      2022年11月23日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息