最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA對字符串進(jìn)行32位MD5加密的實(shí)踐

 更新時(shí)間:2022年08月17日 15:54:34   作者:yujkss  
本文主要介紹了JAVA對字符串進(jìn)行32位MD5加密的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

MD5簡單介紹

MD5 加密后的位數(shù)有兩種:16 位與 32 位。默認(rèn)使用32位。 (16 位實(shí)際上是從 32 位字符串中取中間的第 9 位到第 24 位的部分)為提高安全性。根據(jù)業(yè)務(wù)需求,可以對md5 添加偏移量。如對原有字符拼接指定位數(shù)的字符串。

MD5信息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個(gè)128位(16字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。MD5由美國密碼學(xué)家羅納德·李維斯特(Ronald Linn Rivest)設(shè)計(jì),于1992年公開,用以取代MD4算法。這套算法的程序在 RFC 1321 標(biāo)準(zhǔn)中被加以規(guī)范。1996年后該算法被證實(shí)存在弱點(diǎn),可以被加以破解,對于需要高度安全性的數(shù)據(jù),專家一般建議改用其他算法,如SHA-2。2004年,證實(shí)MD5算法無法防止碰撞(collision),因此不適用于安全性認(rèn)證,如SSL公開密鑰認(rèn)證或是數(shù)字簽名等用途。

大家都知道,地球上任何人都有自己獨(dú)一無二的指紋,這常常成為公安機(jī)關(guān)鑒別罪犯身份最值得信賴的方法;與之類似,MD5就可以為任何文件(不管其大小、格式、數(shù)量)產(chǎn)生一個(gè)同樣獨(dú)一無二的“數(shù)字指紋”,如果任何人對文件做了任何改動(dòng),其MD5值也就是對應(yīng)的“數(shù)字指紋”就會(huì)發(fā)生變化。

MD5算法具有以下特點(diǎn)

1、壓縮性:任意長度的數(shù)據(jù),算出的MD5值長度都是固定的。

2、容易計(jì)算:從原數(shù)據(jù)計(jì)算出MD5值很容易。

3、抗修改性:對原數(shù)據(jù)進(jìn)行任何改動(dòng),哪怕只修改1個(gè)字節(jié),所得到的MD5值都有很大區(qū)別。

4、強(qiáng)抗碰撞:已知原數(shù)據(jù)和其MD5值,想找到一個(gè)具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。

代碼1

public static void main(String[] args) {
    String s ="202111012231046012000000111101705104827";
    for (int i = 0; i <50 ; i++) {
        System.out.println( EncodeByMD5(s).toUpperCase()+"   長度"+EncodeByMD5(s).toUpperCase().length());
    }
}

/**
 * 對字符串進(jìn)行32位MD5加密
 * @param str
 * @return
 */
public static String EncodeByMD5(String str) {
    try {
        // 生成一個(gè)MD5加密計(jì)算摘要
        MessageDigest md = MessageDigest.getInstance("MD5");
        // 計(jì)算md5函數(shù)
        md.update(str.getBytes("UTF-8"));
        // digest()最后確定返回md5 hash值,返回值為8為字符串。因?yàn)閙d5 hash值是16位的hex值,實(shí)際上就是8位的字符
        // BigInteger函數(shù)則將8位的字符串轉(zhuǎn)換成16位hex值,用字符串來表示;得到字符串形式的hash值
        String md5=new BigInteger(1, md.digest()).toString(16);
        //BigInteger會(huì)把0省略掉,需補(bǔ)全至32位
        return fillMD5(md5);
    } catch (Exception e) {
        throw new RuntimeException("MD5加密錯(cuò)誤:"+e.getMessage(),e);
    }
}

private static String fillMD5(String md5){
    //如果不夠32位則回調(diào)自身補(bǔ)零,最后返回32位長度的簽名
    return md5.length()==32?md5:fillMD5("0"+md5);
}

MD5Util

package com.kuang.jiami;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util {
    //待加密的密碼
    public static String password = "202111012231046012000000111101705104829";

    public static void main(String args[]) {
        //結(jié)果字符串
        String result = "";
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(password.getBytes());
            byte b[] = md.digest();
            int i;
            StringBuffer buf = new StringBuffer("");
            for (int offset = 0; offset < b.length; offset++) {
                i = b[offset];
                if (i < 0)
                    i += 256;
                if (i < 16)
                    buf.append("0");
                buf.append(Integer.toHexString(i));
            }
            result = buf.toString();
            System.out.println("MD5(" + password + ",32小寫) = " + result);
            System.out.println("MD5(" + password + ",32大寫) = " + result.toUpperCase());
            System.out.println("++++++++++++++++++++++++各位大哥借過+++++++++++++++++++++++");
            System.out.println("MD5(" + password + ",16小寫) = " + buf.toString().substring(8, 24));
            System.out.println("MD5(" + password + ",16大寫) = " + buf.toString().substring(8, 24).toUpperCase());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}

MD5Helper

package com.kuang.jiami;

import java.security.MessageDigest;


public class MD5Helper {

    public static String encrypt32(String encryptStr) {
        MessageDigest md5;
        try {
            md5 = MessageDigest.getInstance("MD5");
            byte[] md5Bytes = md5.digest(encryptStr.getBytes());
            StringBuffer hexValue = new StringBuffer();
            for (int i = 0; i < md5Bytes.length; i++) {
                int val = ((int) md5Bytes[i]) & 0xff;
                if (val < 16)
                    hexValue.append("0");
                hexValue.append(Integer.toHexString(val));
            }
            encryptStr = hexValue.toString();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return encryptStr;
    }
    
    public static String encrypt16(String encryptStr) {
        return encrypt32(encryptStr).substring(8, 24);
    }

    public static void main(String[] args) {
        String encryptStr = "202111012231046012000000111101705104829";
        System.out.println(MD5Helper.encrypt32(encryptStr).toUpperCase());
        System.out.println(MD5Helper.encrypt16(encryptStr).toUpperCase());
    }
}

到此這篇關(guān)于JAVA對字符串進(jìn)行32位MD5加密的實(shí)踐的文章就介紹到這了,更多相關(guān)JAVA 字符串32位MD5加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java編程使用卡片布局管理器示例【基于swing組件】

    Java編程使用卡片布局管理器示例【基于swing組件】

    這篇文章主要介紹了Java編程使用卡片布局管理器,結(jié)合實(shí)例形式分析了java基于swing組件的卡片布局管理器具體實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2018-01-01
  • SpringBoot 使用jwt進(jìn)行身份驗(yàn)證的方法示例

    SpringBoot 使用jwt進(jìn)行身份驗(yàn)證的方法示例

    這篇文章主要介紹了SpringBoot 使用jwt進(jìn)行身份驗(yàn)證的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • Java Map.Entry的使用方法解析

    Java Map.Entry的使用方法解析

    這篇文章主要介紹了Java Map.Entry的使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java開發(fā)之Spring連接數(shù)據(jù)庫方法實(shí)例分析

    Java開發(fā)之Spring連接數(shù)據(jù)庫方法實(shí)例分析

    這篇文章主要介紹了Java開發(fā)之Spring連接數(shù)據(jù)庫方法,以實(shí)例形式較為詳細(xì)的分析了Java Spring開發(fā)中針對數(shù)據(jù)庫的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • 深入理解java異常處理機(jī)制及應(yīng)用

    深入理解java異常處理機(jī)制及應(yīng)用

    本篇文章主要介紹了java異常處理機(jī)制及應(yīng)用,異常處理機(jī)制是Java語言的一大特色。從異常處理的機(jī)制、異常處理的方法、異常處理的原則等方面介紹Java語言的異常處理技術(shù),有興趣的可以了解一下。
    2016-12-12
  • Java統(tǒng)計(jì)字符串中字符出現(xiàn)次數(shù)的方法示例

    Java統(tǒng)計(jì)字符串中字符出現(xiàn)次數(shù)的方法示例

    這篇文章主要介紹了Java統(tǒng)計(jì)字符串中字符出現(xiàn)次數(shù)的方法,涉及Java針對字符串的遍歷、查找、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • 自己編寫IOC控制反轉(zhuǎn)及AOP面向切面

    自己編寫IOC控制反轉(zhuǎn)及AOP面向切面

    本文展示通過一個(gè)案例來自己手寫IOC和AOP代碼,通過銀行轉(zhuǎn)賬案例詳細(xì)的代碼編寫和文檔解釋來說明IOC和AOP的思想,會(huì)分享存在的問題和解決問題的思路
    2021-06-06
  • Spring Boot 項(xiàng)目創(chuàng)建的詳細(xì)步驟(圖文)

    Spring Boot 項(xiàng)目創(chuàng)建的詳細(xì)步驟(圖文)

    這篇文章主要介紹了Spring Boot 項(xiàng)目創(chuàng)建的詳細(xì)步驟(圖文),這里我們有兩種創(chuàng)建Spring Boot項(xiàng)目的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • SpringBoot整合Swagger教程詳解

    SpringBoot整合Swagger教程詳解

    SpringBoot是一個(gè)基于Spring框架的輕量級開源框架,它的出現(xiàn)極大地簡化了Spring應(yīng)用的搭建和開發(fā),本文將介紹如何在SpringBoot中使用Swagger來實(shí)現(xiàn)接口文檔的自動(dòng)生成,感興趣的同學(xué)可以參考一下
    2023-04-04
  • Java信號量全解析

    Java信號量全解析

    這篇文章主要介紹了Java信號量的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01

最新評論

盈江县| 澎湖县| 封丘县| 平谷区| 海南省| 什邡市| 马龙县| 徐闻县| 金乡县| 资兴市| 乐安县| 盖州市| 葵青区| 旺苍县| 山东省| 蓬莱市| 呼和浩特市| 新化县| 台中市| 黑龙江省| 开原市| 通江县| 高淳县| 迁西县| 郑州市| 图木舒克市| 房山区| 寿阳县| 分宜县| 鹤庆县| 读书| 绍兴县| 攀枝花市| 南投县| 齐齐哈尔市| 兴隆县| 屯留县| 庄河市| 林州市| 昌乐县| 蒙城县|