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

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

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

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

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

    MD5加密簡介

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

    MD5加密原理

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

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

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

    MD5加密常用方法

    /** * 用MD5算法進(jìn)行加密 * @param str 需要加密的字符串 * @return MD5加密后的結(jié)果 * @throws UnsupportedEncodingException */ public static String encodeMD5String(String str) { return getMD5(str); }復(fù)制代碼 /** * 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; }復(fù)制代碼/** * 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();//字母大寫 } 復(fù)制代碼 /** * 加密 * @param content * @return */ public static String encrypt(String content) { String password = "12345678dd"; byte[] encryptResult = encrypt(content, password); String encryptResultStr = parseByte2HexStr(encryptResult); return encryptResultStr; }復(fù)制代碼/** * 加密 * @param content * @param password * @return */ public static String encryptStr(String content, String password) { byte[] encryptResult = encrypt(content, password); return parseByte2HexStr(encryptResult); }復(fù)制代碼/** * 解密 * @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)容進(jìn)行解碼 String result = new String(decryptResult, UTF8); return result; }復(fù)制代碼/** * 解密 * @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)容進(jìn)行解碼return new String(decryptResult, UTF8); }

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

    相關(guān)推薦

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

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

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

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

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

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

      2022年11月25日
    • 《寶可夢(mèng)朱紫》奇魯莉安怎么進(jìn)化?奇魯莉安進(jìn)化方法分享

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

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

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

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

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

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

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

      2022年11月24日
    • 《寶可夢(mèng)朱紫》暴飛龍?jiān)趺醋??暴飛龍獲得方法

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

      2022年11月23日
    • 《寶可夢(mèng)朱紫》布土撥怎么進(jìn)化?布土撥進(jìn)化方法介紹

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

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

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

      2022年11月23日

    聯(lián)系我們

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