Bagaimana cara mendapatkan jumlah string MD5 menggunakan python?

262

Di Flickr API docs , Anda perlu menemukan jumlah MD5 dari sebuah string untuk menghasilkan [api_sig]nilai.

Bagaimana cara menghasilkan jumlah MD5 dari string?

Contoh Flickr:

tali: 000005fab4534d05api_key9a0554259914a86fb9e7eb014e4e5d52permswrite

Jumlah MD5: a02506b31c1cd46c2e0b6380fb94eb3d

super9
sumber

Jawaban:

252

Untuk Python 2.x, gunakan hashlib python

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

Keluaran: a02506b31c1cd46c2e0b6380fb94eb3d

Ikke
sumber
77
Jangan mencoba untuk menggunakannya hashlib.md5().update('your string').hexdigest(), itu tidak akan berhasil karena update()mengembalikan Tidak ada. Jika Anda menginginkan solusi satu baris, gunakan jawaban Mark Longair.
Christopher Manning
@ChristopherManning m.hexdigest () mengembalikan intisari panjang 32 karakter. Bagaimana cara mencerna panjang 16 karakter?
Adil Malik
@ Darwesh itu 32 karakter karena itu representasi hex, lakukan m.digest_sizedi atas kode ini, intisari internal sudah 16 byte.
Baris Demiray
1
@Darwesh Anda cukup mengiris stringm.hexdigest()[:16]
fedterzi
@ Darwesh Menurut RFC 1321 , md5 selalu 16 byte. Jika Anda hanya ingin mencerna panjang 16 karakter, Anda bisa melakukan irisan seperti yang dikatakan Baris Demiray.
ryan
569

Anda dapat melakukan hal berikut:

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())

Namun dalam hal ini Anda mungkin lebih baik menggunakan modul Python yang bermanfaat ini untuk berinteraksi dengan Flickr API:

... yang akan menangani otentikasi untuk Anda.

Dokumentasi resmi hashlib

Mark Longair
sumber
Saya melihat API. Saya hanya ingin tahu bagaimana saya bisa melakukannya. Terima kasih!
super9
1
hexdigest () mengembalikan intisari panjang 32 karakter. Bagaimana cara mencerna panjang 16 karakter?
Adil Malik
2
Jawaban bagus! Bolehkah saya bertanya mengapa dalam Python 2 kita tidak perlu melakukan pengkodean utf-8, namun dalam Python 3 kita perlu melakukan pengkodean. Terima kasih. @Mark Longair
Jeff Hu
3
@JeffHu, karena hashlib.md5mengharapkan sebuah byte-seperti-objek
MaxU
1
Versi Python 3 juga harus digunakan dalam Python 2. @JeffHu memperluas apa yang dikatakan @MaxU, fungsi md5 mengambil bytestring dan tidak menerima unicode. Python 3 adalah (benar) ketat / eksplisit, sehingga str ( "") adalah unicode dan harus dikodekan ke bytestring. String dalam python2 dapat diartikan sebagai string btyestring atau unicode, dan melewatkan ""string str ( ) diartikan sebagai bytestring. Jika string memiliki karakter unicode, ini akan memunculkan Exception. Pengodean bytestring akan membuat karakter ascii tidak tersentuh dan mengonversi unicode dengan benar
Charles L.
11

Sudahkah Anda mencoba menggunakan implementasi MD5 di hashlib ? Perhatikan bahwa algoritma hashing biasanya bekerja pada data biner daripada data teks , jadi Anda mungkin perlu berhati-hati tentang pengkodean karakter mana yang digunakan untuk mengonversi dari teks ke data biner sebelum hashing.

The hasil dari hash juga data biner - tampak seperti contoh Flickr telah kemudian telah diubah menjadi teks menggunakan hex encoding. Gunakan hexdigestfungsi di hashlib untuk mendapatkan ini.

Jon Skeet
sumber
hexdigest () mengembalikan intisari panjang 32 karakter. Bagaimana cara mencerna panjang 16 karakter?
Adil Malik
1
@ Darwesh: Ya, MD5 adalah 128 bit, yang merupakan 32 karakter dalam hex. Jika Anda ingin digest yang lebih kecil, Anda perlu digest 64-bit. Itu akan sangat lemah meskipun ...
Jon Skeet
3
Try This 
import hashlib
user = input("Enter text here ")
h = hashlib.md5(user.encode())
h2 = h.hexdigest()
print(h2)
Ome Mishra
sumber
3

Kamu bisa memakai b karakter di depan string literal :

import hashlib
print(hashlib.md5(b"Hello MD5").hexdigest())
print(hashlib.md5("Hello MD5".encode('utf-8')).hexdigest())

Di luar:

e5dadf6524624f79c3127e247f04b548
e5dadf6524624f79c3127e247f04b548
prosti
sumber
0

Anda dapat mencoba

#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)
Md Jewele Islam
sumber