欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解JAVA中獲取文件MD5值的四種方法

 更新時間:2022年08月11日 10:51:57   作者:知為誰開  
這篇文章主要介紹了JAVA中獲取文件MD5值的四種方法,獲取文件MD5值主要分為三個步驟,第一步獲取文件的byte信息,第二步通過MessageDigest類進行MD5加密,第三步轉(zhuǎn)換成16進制的MD5碼值,需要的朋友可以參考下

 JAVA中獲取文件MD5值的四種方法其實都很類似,因為核心都是通過JAVA自帶的MessageDigest類來實現(xiàn)。獲取文件MD5值主要分為三個步驟,第一步獲取文件的byte信息,第二步通過MessageDigest類進行MD5加密,第三步轉(zhuǎn)換成16進制的MD5碼值。幾種方法的不同點主要在第一步和第三步上。具體可以看下面的例子:

方法一、

private final static String[] strHex = { "0", "1", "2", "3", "4", "5",
            "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

    public static String getMD5One(String path) {
        StringBuffer sb = new StringBuffer();
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] b = md.digest(FileUtils.readFileToByteArray(new File(path)));
            for (int i = 0; i < b.length; i++) {
                int d = b[i];
                if (d < 0) {
                    d += 256;
                }
                int d1 = d / 16;
                int d2 = d % 16;
                sb.append(strHex[d1] + strHex[d2]);
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

  方法一是比較原始的一種實現(xiàn)方法,首先將文件一次性讀入內(nèi)存,然后通過MessageDigest進行MD5加密,最后再手動將其轉(zhuǎn)換為16進制的MD5值。

方法二、

public static String getMD5Two(String path) {
        StringBuffer sb = new StringBuffer("");
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(FileUtils.readFileToByteArray(new File(path)));
            byte b[] = md.digest();
            int d;
            for (int i = 0; i < b.length; i++) {
                d = b[i];
                if (d < 0) {
                    d = b[i] & 0xff;
                    // 與上一行效果等同
                    // i += 256;
                }
                if (d < 16)
                    sb.append("0");
                sb.append(Integer.toHexString(d));
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

  方法二與方法一不同的地方主要是在步驟三,這里借助了Integer類的方法實現(xiàn)16進制的轉(zhuǎn)換,比方法一更簡潔一些。PS:JAVA中byte是有負數(shù)的,代碼中&0xff的操作與計算機中數(shù)據(jù)存儲的原理有關(guān),即負數(shù)存儲的是二進制的補碼,有興趣的童鞋可以挖一下,這里不展開說。

方法三、

public static String getMD5Three(String path) {
        BigInteger bi = null;
        try {
            byte[] buffer = new byte[8192];
            int len = 0;
            MessageDigest md = MessageDigest.getInstance("MD5");
            File f = new File(path);
            FileInputStream fis = new FileInputStream(f);
            while ((len = fis.read(buffer)) != -1) {
                md.update(buffer, 0, len);
            }
            fis.close();
            byte[] b = md.digest();
            bi = new BigInteger(1, b);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bi.toString(16);
    }

  方法三與前面兩個方法相比,在讀入文件信息上有點不同。這里是分多次將一個文件讀入,對于大型文件而言,比較推薦這種方式,占用內(nèi)存比較少。步驟三則是通過BigInteger類提供的方法進行16進制的轉(zhuǎn)換,與方法二類似。

方法四、

DigestUtils.md5Hex(new FileInputStream(path));

  方法四應(yīng)該是最便捷的吧,哈哈,好東西要留在最后,如果你只需要使用標準的MD5,其實一行代碼就夠了,JAVA自帶的commons-codec包就提供了獲取16進制MD5值的方法。其底層實現(xiàn)上,也是分多次將一個文件讀入,類似方法三。所以性能上也不錯。

  總結(jié):其實方法都是類似的,推薦使用方法四,簡潔且性能不錯,當然,如果要做一些調(diào)整什么的,可以根據(jù)自己的需求進行方法的選擇。

PS:其實還有一個重點,就是如何知道自己生成的MD5值是否正確呢?

  方法很多,其實有一個挺簡單的方法,不需要另外安裝什么軟件。使用windows自帶的命令即可:certutil -hashfile [文件路徑] MD5,例子如下:

到此這篇關(guān)于JAVA中獲取文件MD5值的四種方法的文章就介紹到這了,更多相關(guān)java獲取文件MD5值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Jmeter如何獲取jtl文件中所有的請求報文詳解

    Jmeter如何獲取jtl文件中所有的請求報文詳解

    JMeter的可以創(chuàng)建一個包含測試運行結(jié)果的文本文件,這些通常稱為JTL文件,因為這是默認擴展名,但可以使用任何擴展名,這篇文章主要給大家介紹了關(guān)于Jmeter如何獲取jtl文件中所有的請求報文的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Java使用反射調(diào)用方法示例

    Java使用反射調(diào)用方法示例

    這篇文章主要介紹了Java使用反射調(diào)用方法,結(jié)合實例形式分析了java使用反射調(diào)用對象方法的相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • 很詳細的Log4j配置步驟

    很詳細的Log4j配置步驟

    Log4J的配置文件(Configuration File)就是用來設(shè)置記錄器的級別、存放器和布局的,它可接key=value格式的設(shè)置或xml格式的設(shè)置信息。通過配置,可以創(chuàng)建出Log4J的運行環(huán)境。
    2008-11-11
  • Java Web 實現(xiàn)QQ登錄功能一個帳號同一時間只能一個人登錄

    Java Web 實現(xiàn)QQ登錄功能一個帳號同一時間只能一個人登錄

    對于一個帳號在同一時間只能一個人登錄,下文給大家介紹的非常詳細,對java web qq 登錄功能感興趣的朋友一起看看吧
    2016-11-11
  • 如何基于java向mysql數(shù)據(jù)庫中存取圖片

    如何基于java向mysql數(shù)據(jù)庫中存取圖片

    這篇文章主要介紹了如何基于java向mysql數(shù)據(jù)庫中存取圖片,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-02-02
  • Java的運算符和程序邏輯控制你了解嗎

    Java的運算符和程序邏輯控制你了解嗎

    這篇文章主要為大家詳細介紹了Java的運算符和程序邏輯控制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • scala中常用特殊符號詳解

    scala中常用特殊符號詳解

    這篇文章主要介紹了scala中常用特殊符號詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-06-06
  • Java反射如何獲取字段屬性值

    Java反射如何獲取字段屬性值

    這篇文章主要介紹了Java反射如何獲取字段屬性值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Maven安裝過程圖文詳解

    Maven安裝過程圖文詳解

    這篇文章主要介紹了Maven安裝過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-07-07
  • java二叉樹的遍歷方式詳解

    java二叉樹的遍歷方式詳解

    這篇文章主要為大家詳細介紹了java實現(xiàn)二叉樹遍歷的四種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-08-08

最新評論