平常用 Linux 習慣用 sha1 或 md5 校驗檔案是否正確下載

今天要校驗檔案時卻發現 CRC / MD5 / sha1 / sha256 等常用的校驗輔助程式都有提供 卻少了CRC32

傷腦筋? 於是想辦法在 Google大神 的協助下找答案

找到了以下兩篇不錯的教學文件:

* Python 計算檔案的 CRC32 驗證碼
-- http://coder.aqualuna.me/2012/01/python-crc32.html

* zlib: Compression Compatible with gzip
-- http://docs.python.org/library/zlib.html#zlib.crc32

接下來的內容為修改自以下兩篇教學文章並加以補充而得

 

這篇的版本差異在哪?

將 function 補完 使它能夠直接執行 而不只是有 function

接著將 binascii.crc32 替換為速度較快的 zlib.crc32

最後補上簡易使用提示、錯誤提示

大致上是這樣... 接著 直接看程式碼吧!!


使用程式語言:
Python

使用方法:
  crc32_check {filename}  

使用範例:
[guessi@home ~]$ cat demofile
Hello World

[guessi@home ~]$ ./crc32_calc demofile
B095E5E3 demofile

[guessi@home ~]$ ./crc32_calc /home/user/demofile
B095E5E3 demofile

完整程式碼:



#!/usr/bin/python
#-*- coding: utf-8 -*-

import os, sys, zlib

def crc32_calculation(filename):
    try:
        blocksize = 1024 * 64
        fd = open(filename, "rb")
        content = fd.read(blocksize)
        checksum = 0
        while len(content) != 0:
            checksum = zlib.crc32(content, checksum) & 0xFFFFFFFF
            content = fd.read(blocksize)
        fd.close()

    except:
        sys.exit('Error: CRC32 Calculation Failed')

    return checksum

if __name__ == "__main__":

    if len(sys.argv) != 2:
        sys.exit('Usage: %s {filename}' % os.path.basename(sys.argv[0]))

    if not os.path.exists(sys.argv[1]):
        sys.exit('Error: File Not Exist or Access Denied')

    result = crc32_calculation(sys.argv[1])

    print '%08X %s' % (result, os.path.basename(sys.argv[1]))
 

 

查過 Google 或 Python 官方教學文件還是看不懂的話再發問吧

 

以上 簡易CRC32校驗輔助程式 分享給各位 :)

    文章標籤

    Python Linux CRC32

    全站熱搜

    沒 發表在 痞客邦 留言(0) 人氣()