[ ironpython / python ] ironpython で MD5 ハッシュ値を算出する
CPython の標準ライブラリのひとつ MD5 モジュールは IronPython では、そのままではインポートすることができません。その理由はこのへんにあるように C 拡張を利用しているからですが、MD5 が利用できないといろいろ不便です。
こちらには md5 モジュールを C# で作った方がいらっしゃいますが、ただ単にフィンガープリントを出力するだけとか、'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9' という形式ではなくて見慣れた形式のほうがいい場合もあると思って、ものすごく単純な関数を作ってみました。
import clr
clr.AddReference( "System" )
import System
from System.Security.Cryptography import MD5
def calculate_md5( hoge ):
# Because CPython's MD5 module cannot be used.
# Thus, to get a fingerprint, you must use .NET Framework Class Library module
# "System.Security.Cryptography.MD5"
insMD5 = MD5.Create()
return ''.join( [("%x" % fragment) for fragment in \
insMD5.ComputeHash( System.Text.Encoding.Default.GetBytes( hoge ) )] )
やっていることは単純で MD5 クラスのインスタンスを作って、そのメソッドを呼び出して MD5 を計算します ( insMD5.ComputeHash() )。この戻り値は BytesArray 型のオブジェクトです。これをリスト内包式で "ea703e7aa1efda064eaa57d9e8ab7e" のようなよく見る形式に変換しています。変換前がいいという場合はリスト内包式を解除して insMD5.ComputeHash() だけの式にしてください。
| 固定リンク
この記事へのコメントは終了しました。
コメント