1. 程式人生 > >MD5檔案校驗碼生成java程式碼

MD5檔案校驗碼生成java程式碼

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
  
public class MD5Util {  
    /** 
     * 預設的密碼字串組合,用來將位元組轉換成 16 進製表示的字元,apache校驗下載的檔案的正確性用的就是預設的這個組合 
     */  
    protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6',  
            '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };  
  
    protected static MessageDigest messagedigest = null;  
    static {  
        try {  
            messagedigest = MessageDigest.getInstance("MD5");  
        } catch (NoSuchAlgorithmException nsaex) {  
            System.err.println(MD5Util.class.getName()  
                    + "初始化失敗,MessageDigest不支援MD5Util。");  
            nsaex.printStackTrace();  
        }  
    }  
      
    /** 
     * 生成字串的md5校驗值 
     *  
     * @param s 
     * @return 
     */  
    public static String getMD5String(String s) {  
        return getMD5String(s.getBytes());  
    }  
      
    /** 
     * 判斷字串的md5校驗碼是否與一個已知的md5碼相匹配 
     *  
     * @param password 要校驗的字串 
     * @param md5PwdStr 已知的md5校驗碼 
     * @return 
     */  
    public static boolean checkPassword(String password, String md5PwdStr) {  
        String s = getMD5String(password);  
        return s.equals(md5PwdStr);  
    }  
      
    /** 
     * 生成檔案的md5校驗值 
     *  
     * @param file 
     * @return 
     * @throws IOException 
     */  
    public static String getFileMD5String(File file) throws IOException {         
        InputStream fis;  
        fis = new FileInputStream(file);  
        byte[] buffer = new byte[1024];  
        int numRead = 0;  
        while ((numRead = fis.read(buffer)) > 0) {  
            messagedigest.update(buffer, 0, numRead);  
        }  
        fis.close();  
        return bufferToHex(messagedigest.digest());  
    }  
  
    /** 
     * JDK1.4中不支援以MappedByteBuffer型別為引數update方法,並且網上有討論要慎用MappedByteBuffer, 
     * 原因是當使用 FileChannel.map 方法時,MappedByteBuffer 已經在系統內佔用了一個控制代碼, 
     * 而使用 FileChannel.close 方法是無法釋放這個控制代碼的,且FileChannel有沒有提供類似 unmap 的方法, 
     * 因此會出現無法刪除檔案的情況。 
     *  
     * 不推薦使用 
     *  
     * @param file 
     * @return 
     * @throws IOException 
     */  
    public static String getFileMD5String_old(File file) throws IOException {  
        FileInputStream in = new FileInputStream(file);  
        FileChannel ch = in.getChannel();  
        MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0,  
                file.length());  
        messagedigest.update(byteBuffer);  
        in.close();
        return bufferToHex(messagedigest.digest());  
    }  
  
    public static String getMD5String(byte[] bytes) {  
        messagedigest.update(bytes);  
        return bufferToHex(messagedigest.digest());  
    }  
  
    private static String bufferToHex(byte bytes[]) {  
        return bufferToHex(bytes, 0, bytes.length);  
    }  
  
    private static String bufferToHex(byte bytes[], int m, int n) {  
        StringBuffer stringbuffer = new StringBuffer(2 * n);  
        int k = m + n;  
        for (int l = m; l < k; l++) {  
            appendHexPair(bytes[l], stringbuffer);  
        }  
        return stringbuffer.toString();  
    }  
  
    private static void appendHexPair(byte bt, StringBuffer stringbuffer) {  
        char c0 = hexDigits[(bt & 0xf0) >> 4];// 取位元組中高 4 位的數字轉換, >>> 為邏輯右移,將符號位一起右移,此處未發現兩種符號有何不同   
        char c1 = hexDigits[bt & 0xf];// 取位元組中低 4 位的數字轉換   
        stringbuffer.append(c0);  
        stringbuffer.append(c1);  
    }  
      
    public static void main(String[] args) throws IOException {  
        long begin = System.currentTimeMillis();  
  
        File file = new File("E:/txt.txt");  
        if(!file.exists()){
            System.out.println("不存在");   
        }
        String md5 = getFileMD5String(file);  
  
//      String md5 = getMD5String("a");  
          
        long end = System.currentTimeMillis();  
        System.out.println("md5:" + md5 + " time:" + ((end - begin) / 1000) + "s");  
        System.out.println(file.getPath());
    }  

相關推薦

MD5檔案生成java程式碼

import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.MappedByteBu

java實現CRC16生成

public static String crc16(String gprsstr) { try { int crc; int strlength, r; byte sbit; int tc; strlength = gprsstr.len

獲取檔案MD5,SHA1

下載完軟體,如果對於輸入源不放心可以對比檔案的md5碼或者網站上提供的校驗碼: windows系統使用hashtab軟體 linux,mac系統可以使用命令獲取: /usr/bin/openssl s

CRC生成與資料原始碼程式 (包括CRC-4,5,6,7,8,16,32)

C程式碼 收藏程式碼 /******************************************************************** * Name: CRC-4/ITU x4+x+1 *

PHP MD5檔案 判斷檔案是否相同

對於一個類似網盤或者圖片分享功能的平臺來說,單個檔案的重複上傳是個挺煩人的事情,佔空間啊。 使用md5_file函式即可解決這個問題。 以下為比較兩個檔案是否相同的方法demo例項 <?php function md5FileCheck($filename1, $filename2) { $m1 =

Android MD5生成與演算法實現

在Java中,java.security.MessageDigest (rt.jar中)已經定義了 MD5 的計算,所以我們只需要簡單地呼叫即可得到 MD5 的128 位整數。然後將此 128 位計 16 個位元組轉換成 16 進製表示即可。      下面是一個可生成

使用PowerShell 的Get-FileHash 命令為檔案生成

PowerShell is an automation platform and scripting language for Windows and Windows Server that allows you to simplify the management of

java modbus crc16 socket給傳送的資料新增crc

首先crc16校驗碼的生成的原理在上一篇部落格裡面已經說過了; 前提:xframe配置京金華伺服器的埠號,繫結ip地址和埠號 程式要實現什麼? 這個程式主要實現的是伺服器傳送資料到客戶端,然後客戶端傳送資料到伺服器端; 是一問一答的形式; 只有伺服器傳送,客戶端才會應答 傳送

模擬RSA雙向驗證,並且實現DES加密以及MD5過程(python程式碼實現)

要求如下:            (1)A,B兩端各生成公鑰金鑰對(PA,SA), 金鑰對(PB,SB)。            (2)A端生成隨機數N1,用B的公鑰PB加

如何計算檔案MD5 sha1 -- 微軟MD5/SHA1 工具 Microsoft File Checksum Integrity Verifier

微軟出品的小工具(Microsoft File Checksum Integrity Verifier)。 https://www.microsoft.com/en-us/download/detai

C#實現字串,檔案獲取Md5加密方法

http://jingyan.baidu.com/article/db55b6099758134ba30a2f1a.html Md5是一種雜湊演算法,理論上是不可解密的,而且重複的機率極小極小,因此在平常的密碼儲存上應用比較廣泛,這個值一般情況下是唯一的,所以在檔案校驗

基於openapi3.0的yaml檔案生成java程式碼的一次實踐

在github上看了swagger-api專案(https://github.com/swagger-api/swagger-codegen)中的一些文件以及swagger-codegen的使用說明,還是覺得有些麻煩,該專案中有提到使用swagger-codeg

集裝箱編號規則及java/JavaScript的實現

{       if ((str=="a")||(str=="A"))    return10;    elseif ((str=="b")||(str=="B"))    return12;        elseif ((str=="c")||(str=="C"))    return13;       

學習如何使用Mybatis-generator 自動生成java程式碼以及Mapper檔案

      今天用到了mybatis 中 自動生成程式碼的外掛即 mybatis-generator 來生成程式碼。具體步驟如下。 首先建立一個資料夾這裡命名為 generator (這裡使用的是sqlserver 資料庫) 接著新建xml檔案進行配置 最後以命令列的

JAVA CRC16計算

package com.hcs.lqjc.controller.dongDaHengFeng.ModBus.utils; /** * @author lwt * @date 2018-06-26 * * CRC16校驗碼計算 * <p> * (1).

集裝箱編號規則及java程式的實現

由於工作原因要接觸到集裝箱編號,便了解了下集裝箱編號最後一位校驗位的規則順便寫了個程式實現,找了一批編號,驗證通過,貼出來做個記錄。 集裝箱校驗碼校驗規則: 集裝箱號由4位公司程式碼和7位數字組成(如CBHU3202732),其中第七位數字就是校驗碼。

CRC 實現,生成和驗證

class CrcClass { static ushort[] crc_table = { 0x0000 , 0x1021 , 0x2042 , 0x3063 , 0x

MOD 10,11演算法(GB/T 17710-1999 資料處理 系統 )的Java實現

public static int GB17710_1011(String str) { char[] strTmp = str.toCharArray(); int[] aArray, pArray, sArray;

PHP 檔案 檔案MD5 雜湊值

PHP   MD5 雜湊值 應用場景: 1、校驗檔案的完整性       可用於伺服器檔案的備份處理。 2、檢驗檔案的重複性      去除伺服器上傳檔案的重複,佔用額外空間的問題。 3、校驗檔案是否被篡改   下載網站,多會放置MD5校驗碼,用於校驗檔案。 PHP校驗程

JavaMD5

<<首先宣告本文內容有參考網上資源,文章開頭我首先要向他們表示感謝,眾包力量無窮啊>>       之前學過《電腦保安》這門課,瞭解了MD5,不過沒有自己具體實現過,今天講的也只是呼叫java包中已提供的相關功能               MD5這