用C 建立檔案的MD5驗證碼

2021-04-29 19:46:28 字數 1476 閱讀 8014

由於internet的開放性,任何檔案在傳輸過程中都可能受到篡改,而且傳輸過程的不確定性,使得我們缺乏有效的方法保證傳輸檔案的安全。為了避免上述情況,最普遍的做法是隨傳輸檔案提供乙個驗證碼,使用者在收到檔案後,通過重新計算檔案驗證碼並與原始驗證碼比較,如果不匹配則表示檔案在傳輸過程中發生了改變。下面,筆者就使用c#給大家演示一下具體的實現過程。

一、 建立filestream

在構建檔案驗證碼之前,首先需要載入檔案,這就要用到.net framework的filestream類。在.net framework下,檔案都表示為乙個stream,即位元組序列的抽象概念。而所有涉及檔案的讀寫操作都通過stream類的屬性和方法實現。下面,就是具體的實現**:

filestream fst= new filestream(txtfile.text,filemode.open,fileaccess.read, fileshare.read, 8192);

這裡使用了filestream構建函式的一種過載方法,需要提一下的是最後乙個引數值8192,該引數值定義的是緩衝區的大小,即當檔案大於8k時,以8k為單位,對檔案進行分段讀取,以提高讀取檔案的效能。

二、 建立md5物件

在成功建立filestream物件之下,接下來就可以使用md5類計算該物件的雜湊值了。這個實現過程非常簡單,只要先宣告乙個md5cryptoserviceprovider例項,然後使用computehash方法完成計算過程,最後通過hash屬性就可以得到計算好的位元組陣列了。

……

md5cryptoserviceprovider md5=new md5cryptoserviceprovider();

filestream fst= new filestream(txtfile.text,filemode.open,fileaccess.read, fileshare.read, 8192);

md5.computehash(fst);

byte hash=md5.hash;

……

三、轉換驗證碼字串

由於md5雜湊演算法返回的是乙個位元組資料,因此需要轉換成字串。以下就是具體實現的**。

……

byte hash=md5.hash;

stringbuilder sb=new stringbuilder();

foreach(byte byt in hash)

textbox1.text = sb.tostring();

……

在轉換過程中,首先定義了乙個stringbuilder物件,這主要是處於效能上的考慮;接著遍歷md5雜湊值中的每個位元組,並使用string.format方法直接將位元組轉換成16進製制格式的字串,最後輸出結果字串即可。

注:通過本例生成的md5驗證碼與同類md5驗證碼校驗工具在演算法上完全一致,因此完全適用於實際應用場合。

C 用使用MD5碼

md5檔案開啟關閉沒事,改變內容md5碼就會改變,是對內容進行加密後的結果。md5 tanajiya.tar.gz 38b8c2c1093dd0fec383a9d9ac940515,這就是tanajiya.tar.gz檔案的數字簽名。md5將整個檔案當作乙個大文字資訊,通過其不可逆的字串變換演算法,...

用python計算檔案的md5值

在python中內建了md5的實現,就是md5模組,因此可以很簡單的處理比較兩個檔案是否一致的問題。如以下 片斷 import os,sys,md5 f1 open f 1.txt r f2 open f 1.txt r print md5.new f1.read digest md5.new f2...

用Python計算檔案的MD5值

儘管計算md5有很多小工具,重灌系統後還得去找,就自己用python寫了乙個 ge 5.py import hashlib import sys if name main if len sys.argv 2 sys.exit argv error m hashlib.md5 n 1024 4 inp...