2012-06-19 3 views
2

XKCD geohashing 만화 (http://imgs.xkcd.com/comics/geohashing.png)에서 영감을 얻어 파이썬에서 생성기를 코딩하는 방법을 생각해 보았습니다. 나는 그것의 주요 부분으로 블록을 맞았지만 : MD5로 변환 한 다음 십진수로 변환.숫자 문자열을 파이썬으로 MD5로 변환

모두 가능합니까?

답변

5

편집 :

:

여기
>>> md5 = hashlib.md5('2005-05-26-10458.68').hexdigest()  # get MD5 as hex string 
>>> float.fromhex('0.' + md5[:16])       # first half as float 
0.85771326770700229 
>>> float.fromhex('0.' + md5[16:])       # second half as float 
0.54454306955928211 

는 "MD5로 변환 한 후 진수로"에 대한 일반적인 대답은 : 여기에 만화보고 후 XKCD geohashing에 대한보다 완벽한 솔루션입니다

>>> int(hashlib.md5('hello world').hexdigest(), 16) 
125893641179230474042701625388361764291L 
: 당신이 문자열 'hello world'의 진수 MD5, 당신은 다음과 같은 사용할 수 있습니다 싶은 말

hash.hexdigest() 함수는 16 진수 문자열을 반환하고 int(hex_str, 16)convert a hexadecimal string to a decimal 수있는 방법입니다.

+0

오 블레미. 이것은 내가 생각했던 것보다 훨씬 복잡해 졌어 ... 아. 반드시 위조해야합니다. 내가 물어볼 수 있다면, [: 16]과 [16 :]이 MD5 문자열의 두 부분을 어떻게 잡아낼 수 있습니까? – dantdj

+0

@ dantdj, 이것을 슬라이싱 (slicing)이라고하며 여기에 대한 좋은 정보를 찾을 수 있습니다 (http://stackoverflow.com/a/5877008/505154). 그것은 기본적으로''start : stop : step ''이며, 마지막 콜론과 단계는 선택적입니다. '[: 16]'은 처음 16자를 의미하고, [16 :]은 17 번째 자 (0부터 시작하는 색인 ​​작성 때문에)부터 끝까지 모든 것을 취하는 것을 의미합니다. –

+0

아 물론! 왜 16 명이 선택되었는지 궁금 해서요. 모든 것이 그것이 당신 앞에서 펼쳐질 때 조금 분명해 보이기 시작합니다. :) – dantdj

1

int('db931', 16)을 사용하여 16 진수 (16 진수) 문자열 db931을 10 진수로 변환하십시오.

1

여기에 단서가 있습니다. 이것은 the example image을 인코딩하고 거기에있는 숫자를 생성합니다.

>>> from hashlib import md5 
>>> hash = md5("2005-05-26-10458.68").hexdigest() 
>>> hash 
'db9318c2259923d08b672cb305440f97' 
>>> int(hash[:16],16)/16.**16 
0.8577132677070023 
>>> int(hash[16:],16)/16.**16 
0.5445430695592821 
>>> 
+0

고마워요! 잘라 버리고 조금 바꿔야했지만 지금은 기본 버전이 있습니다. 불필요한 소수점을 제거해야합니다. – dantdj

관련 문제