用python計算md5,sha1,crc32

爲了確保從網上下載的文件或程序完整並且沒有被篡改,一般官網上都會給出文件的md5或sha1。我們拿到一個軟件,第一步應當是校驗這個值與官網給的是否一致,如果不一致的話就趕緊刪掉吧。

在Mac上計算一個文件的md5, sha1, crc32:

命令 輸出
$ md5 shark.jpg MD5 (shark.jpg) = 61aead6a48da0fb25618333590745aa7
$ shasum shark.jpg acfe8421e3ad39cf73f19cef02aa3e692e25d5a2 shark.jpg
$ crc32 shark.jpg adc64e03

python也能做這個工作,其中md5和sha1需import hashlib, crc32可以import zlib

#!/usr/bin/env python3

from hashlib import md5, sha1
from zlib import crc32
import sys

def getMd5(filename): #計算md5
    mdfive = md5()
    with open(filename, 'rb') as f:
        mdfive.update(f.read())
    return mdfive.hexdigest()

def getSha1(filename): #計算sha1
    sha1Obj = sha1()
    with open(filename, 'rb') as f:
        sha1Obj.update(f.read())
    return sha1Obj.hexdigest()

def getCrc32(filename): #計算crc32
    with open(filename, 'rb') as f:
        return crc32(f.read())

if len(sys.argv) < 2:
    print('You must enter the file')
    exit(1)
elif len(sys.argv) > 2:
    print('Only one file is permitted')
    exit(1)

filename = sys.argv[1]

print('{:8} {}'.format('md5:', getMd5(filename)))
print('{:8} {}'.format('sha1:', getSha1(filename)))
print('{:8} {:x}'.format('crc32:', getCrc32(filename)))

$ python3 test.py shark.jpg,輸出:

md5:     61aead6a48da0fb25618333590745aa7
sha1:    acfe8421e3ad39cf73f19cef02aa3e692e25d5a2
crc32:   adc64e03

與mac上的計算一致。

發佈了52 篇原創文章 · 獲贊 25 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章