파이썬을 사용하여 문자열의 MD5 합계를 얻는 방법은 무엇입니까?


262

에서 플리커 API 문서 , 당신은 생성하는 문자열의 MD5 합계 찾을 필요 [api_sig]값입니다.

문자열에서 MD5 합계를 생성하는 방법은 무엇입니까?

플리커의 예 :

끈: 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(). 한 줄 솔루션을 원한다면 Mark Longair의 답변을 사용하십시오.
Christopher Manning

@ChristopherManning m.hexdigest ()는 32 자 길이의 다이제스트를 반환합니다. 16 자 길이의 다이제스트를 얻는 방법?
Adil Malik

@ Darwesh 16 진수 표현이기 때문에 32 자 m.digest_size입니다.이 코드 위에 수행하십시오 . 내부 다이제스트는 이미 16 바이트입니다.
Baris Demiray

1
@Darwesh 당신은 단순히 문자열을 슬라이스 할 수 있습니다m.hexdigest()[:16]
fedterzi

@Darwesh RFC 1321 에 따르면 md5는 항상 16 바이트입니다. 16 자 길이의 다이제스트 만 원한다면 Baris Demiray가 말한 것처럼 슬라이스를 수행 할 수 있습니다.
ryan

569

다음을 수행 할 수 있습니다.

파이썬 2.x

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

파이썬 3.x

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

그러나이 경우 Flickr API와 상호 작용하기 위해이 유용한 Python 모듈을 사용하는 것이 좋습니다.

... 인증을 처리합니다.

hashlib의 공식 문서


API를 보았습니다. 어쨌든 어떻게 할 수 있는지 궁금했습니다. 감사!
super9

1
hexdigest ()는 32 자 길이의 다이제스트를 반환합니다. 16 자 길이의 다이제스트를 얻는 방법?
Adil Malik

2
좋은 대답입니다! 왜 파이썬 2에서 utf-8 인코딩을 수행 할 필요가 없는지 물어볼 수 있지만, 파이썬 3에서는 인코딩을 수행해야합니다. 감사. @ Mark Longair
Jeff Hu

3
@JeffHu, 바이트와 ​​유사한 객체를hashlib.md5 기대 하기 때문에
MaxU

1
Python 3 버전도 Python 2에서 사용해야합니다. @MaxU가 말한 것을 확장하면서 @JeffHu는 md5 함수가 바이트 문자열을 취하고 유니 코드를 허용하지 않습니다. 파이썬 3은 (정확하게) 엄격하고 명시 적이므로 str ( "")은 유니 코드이며 바이트 문자열로 인코딩해야합니다. python2의 문자열은 btyestring 또는 유니 코드 문자열로 해석 될 수 있으며 str ( "") 문자열을 전달하는 것은 바이트 열로 해석됩니다. 문자열에 유니 코드 문자가 있으면 예외가 발생합니다. 바이트 스트링을 인코딩하면 ASCII 문자를 그대로 유지하고 유니 코드를 올바르게 변환 할 수 있습니다
Charles L.

11

hashlib 에서 MD5 구현을 사용해 보셨습니까 ? 해싱 알고리즘은 일반적으로 텍스트 데이터가 아닌 이진 데이터에 대해 작동 하므로 해싱 전에 텍스트를 이진 데이터로 변환하는 데 사용되는 문자 인코딩에주의해야 할 수 있습니다.

해시 의 결과 는 이진 데이터입니다. Flickr의 예제가 16 진 인코딩을 사용하여 텍스트로 변환 된 것 같습니다. hexdigest이것을 얻으려면 hashlib 의 함수를 사용하십시오 .


hexdigest ()는 32 자 길이의 다이제스트를 반환합니다. 16 자 길이의 다이제스트를 얻는 방법?
Adil Malik

1
@Darwesh : 음, 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.