平常用 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校驗輔助程式 分享給各位 :)
留言列表