pythonファイルパスからファイルhash値を取得

2759 ワード

 1 import hashlib
 2 import os,sys
 3 
 4 def CalcSha1(filepath):
 5     with open(filepath,'rb') as f:
 6         sha1obj = hashlib.sha1()
 7         sha1obj.update(f.read())
 8         hash = sha1obj.hexdigest()
 9         print(hash)
10         return hash
11 
12 def CalcMD5(filepath):
13     with open(filepath,'rb') as f:
14         md5obj = hashlib.md5()
15         md5obj.update(f.read())
16         hash = md5obj.hexdigest()
17         print(hash)
18         return hash
19 
20 if __name__ == "__main__":
21     if len(sys.argv)==2 :
22         hashfile = sys.argv[1]
23         if not os.path.exists(hashfile):
24             hashfile = os.path.join(os.path.dirname(__file__),hashfile)
25             if not os.path.exists(hashfile):
26                 print("cannot found file")
27             else
28             CalcMD5(hashfile)
29     else:
30         CalcMD5(hashfile)
31         #raw_input("pause")
32 else:
33     print("no filename")

 
 
Pythonを使用したファイルHash計算には、次の2つの点に注意する必要があります.
1、ファイルの开き方は必ずバイナリ方式で、ファイルを开く时にbモードを使う.そうしないと、Hash计算はテキストベースで间违ったファイルHashが得られる.
2、MD 5に対して16ビット(bytes)の値が必要である場合、呼び出し対象のdigest()、hexdigest()のデフォルトは32ビット(bytes)、同理Sha 1のdigest()とhexdigest()はそれぞれ20ビット(bytes)と40ビット(bytes)のhash値を生成する