Pythonを使用して文字列のMD5合計を取得する方法


262

FlickrのAPIドキュメント、あなたが生成する文字列のMD5サム見つける必要がある[api_sig]値を。

文字列からMD5サムを生成するにはどうすればよいですか?

Flickrの例:

ストリング: 000005fab4534d05api_key9a0554259914a86fb9e7eb014e4e5d52permswrite

MD5合計: a02506b31c1cd46c2e0b6380fb94eb3d

回答:


252

Python 2.xの場合、pythonのhashlibを使用します

import hashlib
m = hashlib.md5()
m.update("000005fab4534d05api_key9a0554259914a86fb9e7eb014e4e5d52permswrite")
print m.hexdigest()

出力: a02506b31c1cd46c2e0b6380fb94eb3d


77
を使用しようとしないでください。Noneが返さhashlib.md5().update('your string').hexdigest()れるため機能しupdate()ません。1行のソリューションが必要な場合は、Mark Longairの回答を使用してください。
Christopher Manning、

@ChristopherManning m.hexdigest()は、32文字の長さのダイジェストを返します。16文字のダイジェストを取得するにはどうすればよいですか?
Adil Malik

@Darwesh 16進表記であるため、32文字m.digest_sizeです。このコードの上で、内部ダイジェストはすでに16バイトです。
Baris Demiray 2016

1
@Darwesh単純に文字列をスライスできますm.hexdigest()[:16]
fedterzi

@Darwesh RFC 1321によると、md5は常に16バイトです。16文字のダイジェストだけが必要な場合は、Baris Demirayが言ったようにスライスを行うことができます。
ライアンは2016

569

次のことができます。

Python 2.x

import hashlib
print hashlib.md5("whatever your string is").hexdigest()

Python 3.x

import hashlib
print(hashlib.md5("whatever your string is".encode('utf-8')).hexdigest())

ただし、この場合は、Flickr APIとのやり取りにこの便利なPythonモジュールを使用した方がよいでしょう。

...認証を処理します。

hashlibの公式ドキュメント


APIを見ました。とにかくどうしたらいいのか気になった。ありがとう!
super9 2011年

1
hexdigest()は32文字の長さのダイジェストを返します。16文字のダイジェストを取得するにはどうすればよいですか?
Adil Malik

2
素敵な答え!Python 2ではutf-8エンコーディングを行う必要がないのはなぜですか。Python3ではエンコーディングを行う必要があります。ありがとう。@Mark Longair
Jeff Hu


1
Python 3バージョンは、Python 2でも使用する必要があります。@JeffHuは@MaxUの発言を拡張して、md5関数はバイト文字列を受け取り、Unicodeを受け入れません。Python 3は(正しく)厳密/明示的であるため、str("")はユニコードであり、バイト文字列にエンコードする必要があります。python2の文字列はbtyestringまたはunicode文字列として解釈でき、str("")文字列を渡すとバイト文字列として解釈されます。文字列にUnicode文字が含まれていると、例外が発生します。バイト文字列をエンコードすると、ASCII文字はそのまま残り、Unicodeは正しく変換されます
Charles L.

11

hashlibで MD5実装を使用してみましたか?ハッシュアルゴリズムは通常、テキストデータではなくバイナリデータに作用するため、ハッシュする前にテキストからバイナリデータに変換するために使用する文字エンコーディングに注意する必要がある場合があります。

ハッシュの結果もバイナリデータです。Flickrの例は、16進エンコーディングを使用してテキストに変換されているようです。hexdigestこれを取得するには、hashlib の関数を使用します。


hexdigest()は32文字の長さのダイジェストを返します。16文字のダイジェストを取得するにはどうすればよいですか?
Adil Malik

1
@ダーウェッシュ:そうですね、MD5は128ビットで、16進数で32文字です。小さいダイジェストが必要な場合は、64ビットのダイジェストが必要です。しかし、それはかなり弱いでしょう...
Jon Skeet

3
Try This 
import hashlib
user = input("Enter text here ")
h = hashlib.md5(user.encode())
h2 = h.hexdigest()
print(h2)


0

あなたは試すことができます

#python3
import hashlib
rawdata = "put your data here"
sha = hashlib.sha256(str(rawdata).encode("utf-8")).hexdigest() #For Sha256 hash
print(sha)
mdpass = hashlib.md5(str(sha).encode("utf-8")).hexdigest() #For MD5 hash
print(mdpass)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.