python計算文件md5
A. 你好,可以通過python程序實現文件轉MD5碼嗎如果可以能發一下程序嗎
使用python獲取指定文件的md5碼,代碼和運行效果如下;
獲取wjmd5.py自己的md5為例
#--coding:utf-8;
import hashlib as hash;import os.path;
try: get_ipython();
except:from sys import argv;s1=(os.path.dirname(argv[0]));cwd=(s1 if s1!="" else os.getcwd());os.chdir(cwd);
md5= hash.md5();
res=None;fna=input('請輸入文件名');
with open(fna, "rb") as i: md5.update(i.read());res= md5.hexdigest();
print(res);
B. 求大神指導:python求取一個目錄和壓縮包的md5值
http://stackoverflow.com/questions/1657232/how-can-i-calculate-an-md5-checksum-of-a-directory
C. 用c語言實現python的md5功能
題中所示代碼中,python實現了計算空字元串的MD5值,並對MD5的值的十六進制的字元串所表示的位元組進行BASE64處理。
不像Python內部有實現md5功能,根據ANSI C標准,C語言的標准庫里是沒有md5功能的;
但是RFC1231規定了MD5功能的C實現並提供了附件,可以直接用,也可以直接獲取現成的實現,在編譯鏈接時指定正確的.h頭文件和.lib靜態鏈接庫文件;
這里我採取前者的做法(電腦上沒有裝VC,有VC就簡單很多,使用的是minGW)大概六七百行代碼左右。
然後這里展示不完,給個實現效果圖
BASE64的編碼原理
32
E. 有沒有大神會用python實現基於md5演算法的文件完整性校驗啊
importhashlib
importos
BUF_SIZE=65536
defget_md5(file_path):
returnget_md5_of_file(file_path)
defget_md5_of_file(filePath):
md5=hashlib.md5()
withopen(filePath,'rb')asfile:
whileTrue:
data=file.read(BUF_SIZE)
ifnotdata:
break
md5.update(data)
returnmd5.hexdigest()defget_md5_of_string(string):
returnhashlib.md5(string.encode()).hexdigest()
F. 怎麼樣給python進行性
首先我們查看下md5值的使用方法
我們先建立幾個示例文件方便我們參考,文件file1,file1_,file2
python 怎樣進行文件對比
2
file1的內容和file1_的內容一致,都為
我是文件hello
為了測試我們的文件一致性
python 怎樣進行文件對比
3
file2的內容和file1的文件有所區別,內容為:
我是文件world
python 怎樣進行文件對比
4
接下來就是獲取md5的方法,我可以了個公共方法,大家直接調用就好
需要導入包
import os
import hashlib
def get_file_md5(filename):
if not os.path.isfile(filename):
return
md5 = hashlib.md5()
f = file(filename,'rb')
while True:
b = f.read(8096)
if not b:
break
md5.update(b)
f.close()
return md5.hexdigest()
然後我們列印下這幾個文件的md5值
print 'file1 的md5:%s' % get_file_md5('file1.txt')
print 'file1_的md5:%s' % get_file_md5('file1_.txt')
print 'file2 的md5:%s' % get_file_md5('file2.txt')
python 怎樣進行文件對比
5
運行python結果可以看到,file1和file1_文件的md5值是一樣的,說明這兩個文件是一樣的,file2和他們不一樣
python 怎樣進行文件對比
6
接下來就是使用difflib詳細的對比了,寫法如下:
import difflib
import sys
file1 = open('file1.txt', 'U').readlines()
file2 = open('file2.txt', 'U').readlines()
diff = difflib.ndiff(file1, file2)
sys.stdout.writelines(diff)
python 怎樣進行文件對比
7
運行python結果可以看到,具體兩個文件的區別
我是文件
- hello+ world
python 怎樣進行文件對比
G. 超大文件如何計算md5
首先,至少沒必要先把整個文件讀到內存里。比如在 php 里,如果有人 md5(file_get_contents(big_file_name)) 就確實非常不妥當。因為 md5 是每 512 bit 作為一個 chunk 進行計算的。所以可以每次讀取一部分的內容(最少 512 bit,比較合適是 st_blksize),進行那些 chunk 部分的計算,之後再讀取下一部分內容繼續計算。簡單先說下,md5是有規范的,提供了現成的演算法(規范的名字就是md5演算法。RFC 1321 The MD5 Message-Digest Algorithm),我們只需要翻譯成c、java、python、js等等代碼。前端算超大文件可以取頭跟尾chunk內容及整個文件的name + update 時間一起算md5值就比較快了,只是為了做唯一標識來做斷點續傳,從業務邏輯上應該夠用了。推薦使用 js spark-md5 開源庫,支持直接append各個部分然後算出md5。我做的斷點續傳功能就是用它在前端算的md5. 各大網盤 TB級別 md5演算法應該是這樣的,樓上幾位都說了文件md5是文件流分塊算出來的,那麼網盤想獲得TB級別文件的md5就必須讀取整個文件的文件流才能得到,但是這么做效率十分低下,運算時間是個問題。但是大家忽略了一個問題,文件在上傳的過程也是分塊上傳的,這些上傳的碎片其實也是文件流。那麼可以把計算md5的時間分攤到每一個碎片上。這樣每上傳一個片段就計算一點等上傳完成了,文件的md5也就算出來了。okTB級別MD5不是問題了。上傳完成md5自然就出來了。 不知道我的猜測大家有其他看法沒有。剛才提出都傳完了就還怎麼秒傳。秒傳最基本的是先要前端算出md5然後傳給後端(可能需要更多種哈希值)我研究了很久前端沒有辦法秒內完成超大文件MD5的,現在用html5 的api 可以算出任意大小文件的 md5 但是耗時相當長。我沒有解決辦法。也沒有想到那些網盤怎麼在前端快速獲取md5的。
H. 如何安裝一個python自動化介面解密md5
md5.py這個文件放到md5文件夾後,我們在桌面創建快捷方式--瀏覽--找到你的cmd.exe存放地址--使用cmd.exe,然後我們確定之後。
我們點擊剛剛創建的cmd.exe,右鍵--屬性--起始地址改為你的md5安裝的文件夾,注意:不是md5.py這個文件的地址,是md5文件夾的安裝地址。