私はPerlライブラリをPythonに移植しています。私はPythonに慣れていますが、Perlではそれほど多くはありません。Perl Digest :: MD5の機能に相当するPython
PerlコードはDigest::MD5を使用しています。このモジュールは、3つの機能を有する:
md5($data)
はデータを取り込み、MD5はバイナリmd5_hex($data)
ダイジェスト吐き出すするデータを取り込み、MD5はmd5_base64($data)
データとスピット取り込みヘクスにダイジェスト吐き出しますベース64エンコーディングでmd5ダイジェストを出力
私はこのようなものでmd5_hexを複製できます:
import hashlib
string = 'abcdefg'
print(hashlib.md5(string.encode()).hexdigest())
これはうまくいく(同じ入力は少なくとも同じ出力を与える)。私は他の2つの機能に一致するものは得られないようです。
これは、その文字列のエンコーディングが本当に私は多くをやった何かではありません助けていません。
import hashlib
import base64
string = 'abcdefg'
md5_string = hashlib.md5(string.encode()).hexdigest()
print(base64.b64encode(md5_string))
が、おそらくそれは間違っている:私は、彼らがダイジェストMD5を取ってから、このようなバイナリまたはBase64に再エンコード、何か言うようにPerl関数を解釈してきましたか?私はちょうど欠けている基本的なものがあると確信しています。
Perlのドキュメントはここにある: https://metacpan.org/pod/Digest::MD5
明らかに、ハッシュの16進表現ではなく、ハッシュ自体をBase64でエンコードする必要はありません。 –
大きなファイルのMD5を計算する場合は、次の解決策を検討してください。http://stackoverflow.com/questions/1131220/get-md5-hash-of-big-files-in-python/40961519#40961519 –