XKCD geohashing 만화 (http://imgs.xkcd.com/comics/geohashing.png)에서 영감을 얻어 파이썬에서 생성기를 코딩하는 방법을 생각해 보았습니다. 나는 그것의 주요 부분으로 블록을 맞았지만 : MD5로 변환 한 다음 십진수로 변환.숫자 문자열을 파이썬으로 MD5로 변환
모두 가능합니까?
XKCD geohashing 만화 (http://imgs.xkcd.com/comics/geohashing.png)에서 영감을 얻어 파이썬에서 생성기를 코딩하는 방법을 생각해 보았습니다. 나는 그것의 주요 부분으로 블록을 맞았지만 : MD5로 변환 한 다음 십진수로 변환.숫자 문자열을 파이썬으로 MD5로 변환
모두 가능합니까?
편집 :
:
여기>>> 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 수있는 방법입니다.
int('db931', 16)
을 사용하여 16 진수 (16 진수) 문자열 db931
을 10 진수로 변환하십시오.
여기에 단서가 있습니다. 이것은 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
>>>
고마워요! 잘라 버리고 조금 바꿔야했지만 지금은 기본 버전이 있습니다. 불필요한 소수점을 제거해야합니다. – dantdj
오 블레미. 이것은 내가 생각했던 것보다 훨씬 복잡해 졌어 ... 아. 반드시 위조해야합니다. 내가 물어볼 수 있다면, [: 16]과 [16 :]이 MD5 문자열의 두 부분을 어떻게 잡아낼 수 있습니까? – dantdj
@ dantdj, 이것을 슬라이싱 (slicing)이라고하며 여기에 대한 좋은 정보를 찾을 수 있습니다 (http://stackoverflow.com/a/5877008/505154). 그것은 기본적으로''start : stop : step ''이며, 마지막 콜론과 단계는 선택적입니다. '[: 16]'은 처음 16자를 의미하고, [16 :]은 17 번째 자 (0부터 시작하는 색인 작성 때문에)부터 끝까지 모든 것을 취하는 것을 의미합니다. –
아 물론! 왜 16 명이 선택되었는지 궁금 해서요. 모든 것이 그것이 당신 앞에서 펼쳐질 때 조금 분명해 보이기 시작합니다. :) – dantdj