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

使用Java實(shí)現(xiàn)獲取文件MD5值工具類

 更新時(shí)間:2023年12月17日 10:55:56   作者:大白貓~  
我們?cè)诠ぷ髦型ǔJ褂肕D5對(duì)文件進(jìn)行校驗(yàn)完整性,比較,提高安全性等,這篇文章主要為大家詳細(xì)介紹了Java如何編寫一個(gè)實(shí)現(xiàn)獲取文件MD5值的工具,需要的可以參考下

我們?cè)诠ぷ髦型ǔJ褂肕D5對(duì)文件進(jìn)行校驗(yàn)完整性,比較,提高安全性等,一般MD5有以下幾種作用

1.數(shù)據(jù)完整性驗(yàn)證:MD5值是通過對(duì)文件的內(nèi)容計(jì)算生成的固定長(zhǎng)度哈希值。如果文件內(nèi)容發(fā)生任何變化,其MD5值也會(huì)發(fā)生變化。因此,MD5值可以用來驗(yàn)證文件在傳輸或存儲(chǔ)過程中是否發(fā)生了損壞或篡改。這在下載文件、數(shù)據(jù)備份和文件傳輸過程中非常有用。

2.文件比對(duì):在軟件分發(fā)或數(shù)據(jù)交換中,MD5值可以用于驗(yàn)證文件的完整性。例如,開發(fā)人員可以生成文件的MD5值,發(fā)布在網(wǎng)站上,供用戶下載。用戶下載后可以使用相同的方法計(jì)算文件的MD5值,然后與發(fā)布的MD5值進(jìn)行比對(duì),以確保下載的文件沒有被篡改。

3.安全性:MD5值也可以用于存儲(chǔ)用戶密碼的安全性。通常,密碼存儲(chǔ)為其MD5值,而不是明文文本。當(dāng)用戶登錄時(shí),輸入的密碼經(jīng)過MD5哈希后與存儲(chǔ)在數(shù)據(jù)庫(kù)中的哈希進(jìn)行比對(duì)。這種方式可以增加密碼的安全性,因?yàn)閷?shí)際密碼不會(huì)以明文形式存儲(chǔ)。

4.數(shù)據(jù)重復(fù)檢測(cè):MD5值可以用于檢測(cè)文件或數(shù)據(jù)的重復(fù)。如果兩個(gè)文件的MD5值相同,它們的內(nèi)容也是相同的,因此可以用于識(shí)別和刪除重復(fù)數(shù)據(jù)。

總之,獲取文件的MD5值是一種常見的方法,用于驗(yàn)證文件完整性、安全性和數(shù)據(jù)的唯一性。雖然MD5在一些特定情況下已經(jīng)不再被認(rèn)為是足夠安全的哈希算法,但它仍然廣泛用于這些用途,尤其是在文件完整性驗(yàn)證和數(shù)據(jù)校驗(yàn)方面。對(duì)于更高級(jí)的安全需求,可以考慮使用更安全的哈希算法,如SHA-256

那么如何獲取文件的md5值呢

加依賴

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version> <!-- 或更高版本 -->
</dependency>

編寫工具類

public class FileMD5Utils {
    
    /**
     * 使用Java標(biāo)準(zhǔn)庫(kù)的MessageDigest類獲取MD5值
     * @param filePath 文件路徑
     * @return 文件的md5值
     */
    public static String getMD5ByMessageDigest(String filePath) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            try (InputStream is = new FileInputStream(filePath)) {
                byte[] buffer = new byte[8192];
                int read;
                while ((read = is.read(buffer)) > 0) {
                    md.update(buffer, 0, read);
                }
            }
            byte[] md5 = md.digest();
 
            StringBuilder result = new StringBuilder();
            for (byte b : md5) {
                result.append(String.format("%02x", b));
            }
 
            return result.toString();
        } catch (NoSuchAlgorithmException | IOException e) {
            e.printStackTrace();
            return null;
        }
    }
 
    /**
     * 使用Apache Commons Codec庫(kù)獲取MD5值
     * @param filePath 文件路徑
     * @return 文件的md5值
     */
    public static String getMD5ByApacheCommonsCodec(String filePath) {
        try {
            return DigestUtils.md5Hex(new FileInputStream(filePath));
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
 
    /**
     * 使用Java NIO獲取MD5值
     * @param filePath 文件路徑
     * @return 文件的md5值
     */
    public static String getMD5ByNIO(String filePath) {
        try {
            Path path = new File(filePath).toPath();
            try (InputStream is = java.nio.file.Files.newInputStream(path, StandardOpenOption.READ)) {
                MessageDigest md = MessageDigest.getInstance("MD5");
                byte[] buffer = new byte[8192];
                int read;
                while ((read = is.read(buffer)) > 0) {
                    md.update(buffer, 0, read);
                }
                byte[] md5 = md.digest();
 
                StringBuilder result = new StringBuilder();
                for (byte b : md5) {
                    result.append(String.format("%02x", b));
                }
 
                return result.toString();
            }
        } catch (NoSuchAlgorithmException | IOException e) {
            e.printStackTrace();
            return null;
        }
    }
 
    public static void main(String[] args) {
        String filePath = "文件";
 
        String md5ByMessageDigest = getMD5ByMessageDigest(filePath);
        System.out.println("MD5 (java MessageDigest 標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)): " + md5ByMessageDigest);
 
        String md5ByApacheCommonsCodec = getMD5ByApacheCommonsCodec(filePath);
        System.out.println("MD5 (Apache Commons Codec 庫(kù)實(shí)現(xiàn)): " + md5ByApacheCommonsCodec);
 
        String md5ByNIO = getMD5ByNIO(filePath);
        System.out.println("MD5 (Java NIO 實(shí)現(xiàn)): " + md5ByNIO);
    }
}

到此這篇關(guān)于使用Java實(shí)現(xiàn)獲取文件MD5值工具類的文章就介紹到這了,更多相關(guān)Java獲取文件MD5值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中序列化與反序列化的特性解讀

    Java中序列化與反序列化的特性解讀

    這篇文章主要介紹了Java中序列化與反序列化的特性解讀,當(dāng)我們需要將內(nèi)存中的對(duì)象持久化到磁盤,數(shù)據(jù)庫(kù)中時(shí), 當(dāng)我們需要與瀏覽器進(jìn)行交互時(shí),當(dāng)我們需要實(shí)現(xiàn) RPC 時(shí), 這個(gè)時(shí)候就需要序列化和反序列化了,需要的朋友可以參考下
    2023-08-08
  • java 序列化與反序列化的實(shí)例詳解

    java 序列化與反序列化的實(shí)例詳解

    這篇文章主要介紹了java 序列化與反序列化的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • JavaWeb實(shí)戰(zhàn)之用Servlet+JDBC實(shí)現(xiàn)用戶登錄與注冊(cè)

    JavaWeb實(shí)戰(zhàn)之用Servlet+JDBC實(shí)現(xiàn)用戶登錄與注冊(cè)

    這篇文章主要介紹了JavaWeb實(shí)戰(zhàn)之用Servlet+JDBC實(shí)現(xiàn)用戶登錄與注冊(cè),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很大的幫助,需要的朋友可以參考下
    2021-04-04
  • JVM中判定對(duì)象需要回收的方法

    JVM中判定對(duì)象需要回收的方法

    這篇文章主要介紹了jvm中如何判定對(duì)象需要回收,jvm在確定是否回收的對(duì)象的時(shí)候采用的是root搜索算法來實(shí)現(xiàn),需要的朋友可以參考下
    2022-04-04
  • java file.renameTo返回false的原因及解決方案

    java file.renameTo返回false的原因及解決方案

    這篇文章主要介紹了java file.renameTo返回false的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java StringBuffer類與StringBuilder類用法實(shí)例小結(jié)

    Java StringBuffer類與StringBuilder類用法實(shí)例小結(jié)

    這篇文章主要介紹了Java StringBuffer類與StringBuilder類用法,結(jié)合實(shí)例形式總結(jié)分析了Java StringBuffer類與StringBuilder類的功能、原理及添加、刪除、替換、截取等操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • 深入講解Java Maven配置

    深入講解Java Maven配置

    這篇文章主要介紹了Maven的安裝配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • J2EE Servlet基礎(chǔ)在瀏覽器上運(yùn)行HelloServlet的方法

    J2EE Servlet基礎(chǔ)在瀏覽器上運(yùn)行HelloServlet的方法

    這篇文章主要介紹了J2EE Servlet基礎(chǔ)在瀏覽器上運(yùn)行HelloServlet的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java調(diào)用echarts提供的地圖壓縮方法來壓縮地圖

    Java調(diào)用echarts提供的地圖壓縮方法來壓縮地圖

    今天小編就為大家分享一篇關(guān)于Java調(diào)用echarts提供的地圖壓縮方法來壓縮地圖,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • java實(shí)現(xiàn)通訊錄管理系統(tǒng)

    java實(shí)現(xiàn)通訊錄管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評(píng)論