46986


pythonでRIPEMD160を使いたく調べたのですが、以下のようにすればよいとありました。

[code]

    >>> h = hashlib.new('ripemd160')
    >>> h.update(b"Nobody inspects the spammish repetition")
    >>> h.hexdigest()
    'cc4a5ce1b3df48aec5d22d1f16b894a0b894eccc'
    
[/code]

new("ripemd160")とありますが、私にはripemd160という文字列を代入しているように見えます。このコードでripemd160を呼び出したということでよいのでしょうか？


CC BY-SA 4.0
2018-07-26T04:07:50.453
46976
2018-07-26T06:53:26.863
28644
question
python python3
ripemd160について


> このコードでripemd160を呼び出したということでよいのでしょうか？

良いと思います。

[hashlib.new(name[,
data])](https://docs.python.jp/3/library/hashlib.html#hashlib.new)によると、以下の記載があるため問題ないと思います。

> 一般的なコンストラクタで、第一引数にアルゴリズム名を文字列で受け取ります。他にも、上記ハッシュだけでなく 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  
](https://stackoverflow.com/questions/47476427/get-a-list-of-all-supported-
digest-algorithms?answertab=active#tab-top))


CC BY-SA 4.0
2018-07-26T06:53:26.863
46986
2018-07-26T06:53:26.863
46976
answer