2014-07-10 3 views
-8

나는 위의 코드 줄을 발견했을 때 파이썬으로 코드를 읽었습니다. 위의 코드 줄에서 무엇을 설명 할 수 있습니까?다음 코드 줄은 무엇을합니까?

+0

아마도 당신이 볼 코드의 비트를 실행하려고 할 수 있을까? – buruzaemon

+0

pyython을 모르지만 여기에 내가 가서 : 무작위 문자열을 얻고, whith md5 en 해시 후 16 길이 16 진수 문자열을 얻으십시오. http://forums.udacity.com/questions/100116165/what-does-hexdigest-and-what- do-it-do \ – lordkain

답변

2

이 줄은 임의의 16 자의 16 진수 문자열을 만듭니다.

  • random.random()는 범위 [0.0, 1.0)에서 임의의 실수 값을 생성한다.

    >>> import random 
    >>> random.random() 
    0.845295579640289 
    
  • str()는 임의의 값의 캐릭터 라인 버전을 생성합니다.

    >>> str(0.845295579640289) 
    '0.84529557964' 
    
  • hashlib.md5() 문자열 값으로 초기화 MD5 message digest 해시 객체를 생성한다.

    >>> hashlib.md5('0.84529557964') 
    <md5 HASH object @ 0x10074c530> 
    
  • hexdigest() method

    는 다이제스트는 16 진수로 표현 된 해시를 생성한다. MD5 알고리즘은 32 자 생산하는 수단 16 진수로 표현 될 때, 정보의 16 바이트를 생성한다 :

    >>> hashlib.md5('0.84529557964').hexdigest() 
    '5180b52225eac65bee1d6419e28ef397' 
    
  • [:16] 슬라이스 제 16 개 문자를 골라낸다. 이 단계는 32 중 단지 처음 16 자 다이제스트를 반으로되어

    >>> '5180b52225eac65bee1d6419e28ef397'[:16] 
    '5180b52225eac65b' 
    

모두 모두, 임의의 16 문자의 16 진수 값을 생산하는 대신, 자세한 비효율적이고 안전하지 않은 방법입니다. I는 진수에 대신 인코딩 os.urandom() 사용할 것이다 :

이 16 진수로 표현 랜덤 8 바이트 스트링 값을 생성
>>> import os 
>>> os.urandom(8).encode('hex') 
'a8cb7b56d476b556' 

도 완전히 무작위 16 개 진수 문자를 생성한다.

내 crypto-fu는 그렇게 좋지는 않지만 후자의 형식은 부동 소수점 의사 난수 값 문자열의 MD5 해시 절반을 차지하는 것보다 암호 학적으로 강하다는 인상을 받았습니다.

+0

@martijin pieters, md5 무엇입니까? – shubham

+7

@shubham Google 버튼이 고장 났습니까? – Clive

+1

MD5는 해시 알고리즘입니다. @ shubham – Idris

-1

md5은 128 비트 체크섬을 생성하고 텍스트 형식의 32 자리 16 진수로 표현되는 암호화 - 암호 해독 기술입니다. 이렇게 hashlib.md5(str(random.random())).hexdigest()는 당신에게이 수를 문자열로주고 [:16]는 그 해시의 처음 16 자리를 추출하여 var에 저장합니다. 자세한 내용은이 참고 자료를 참조하십시오.

Python Md5

Md5 Hash

관련 문제