質問: hashlib.new('ripemd160') >>> h.update(b"Nobody inspects the spammish repetition") >>> h.hexdigest() 'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc' ``` new("ripemd160")とありますが、私にはripemd160という文字列を代入しているように見えます。このコードでripemd160を呼び出したということでよいのでしょうか?
回答: > > このコードでripemd160を呼び出したということでよいのでしょうか? > > > 良いと思います。 hashlib.new(name[, data])によると、以下の記載があるため問題ないと思います。 > > 一般的なコンストラクタで、第一引数にアルゴリズム名を文字列で受け取ります。他にも、上記ハッシュだけでなく OpenSSL > > ライブラリーが提供するような他のアルゴリズムにアクセスすることができます。名前のあるコンストラクタの方が new() > > よりもずっと速いので望ましいです。 > > > また、`hashlib`は`new(name)`を使わなくても、`md5(), sha1(), sha224(), sha256(), sha384(), sha512(), blake2b(), blake2s()`など、あらかじめ`名前のあるコンストラクタ`が用意されていますが、OpenSSLを利用するアルゴリズムについては、`名前のあるコンストラクタ`ないものが多いため、`new(name)`を使ってアルゴリズムを指定するようです。 (OpenSSLで利用可能なダイジェストアルゴリズムについては右が参考になります。Get a list of all supported digest algorithms)