Python 3 암호 화(hashlib 와 hmac)모듈 의 실현

다음 코드 는 Python 3.6.1 을 예 로 들 면
  • hashlib:역 암호 화 불가
  • hmac:되 돌 릴 수 없 는 키 쌍 방식 암호 화
  • hashlib 모듈 개요:
    hashlib 모듈 은 서로 다른 안전 해시/안전 해시(Secure Hash Algorithm)와 정보 요약 알고리즘(Message Digest Algorithm)을 위해 공공 적 이 고 통용 되 는 인 터 페 이 스 를 실현 하 였 으 며 통 일 된 입구 라 고 할 수 있 습 니 다.hashlib 모듈 은 md5 와 sha 모듈 의 기능 을 통합 시 켰 을 뿐만 아니 라 MD5,SHA 1,SHA 224,SHA 256,SHA 384 와 SHA 512 등 더 많은 알고리즘 에 대한 함수 도 제공 하기 때문이다.
    hashlib 모듈 사용 절차:
    1)해시 알고리즘 에 대응 하 는 해시 대상(예 를 들 어 이름 은 hash)을 가 져 옵 니 다.hashlib.new(해시 알고리즘 이름,초기 출입 정보)함 수 를 통 해 해시 대상 을 가 져 올 수 있 습 니 다.예 를 들 어 hashlib.new('MD5','Hello'),hashlib.new('SHA 1','Hello')등 입 니 다.hashlib.해시 알고리즘 이름()을 통 해 이 해시 대상 을 얻 을 수 있 습 니 다.예 를 들 어 hashlib.md5(),hashlib.sha 1()등 입 니 다.
    2)설정/추가 입력 정보:해시 대상 의 update(입력 정보)방법 을 호출 하면 정 보 를 설정 하거나 추가 로 입력 할 수 있 습 니 다.이 방법 을 여러 번 호출 하면 매번 전달 하 는 매개 변 수 를 매개 변수 로 update()방법 을 대체 하 는 것 과 같 습 니 다.여러 번 호출 하 는 것 은 덮어 쓰 는 것 이 아니 라 누 적 된 것 이다.
    3)입력 정보 에 대응 하 는 요약 가 져 오기:받 은 해시 대상 의 digest()방법 이나 hexdigest()방법 을 호출 하면 update()방법 에 전 달 된 문자열 매개 변수 에 대한 요약 정 보 를 얻 을 수 있 습 니 다.digest()방법 으로 되 돌아 오 는 요약 정 보 는 바 이 너 리 형식의 문자열 입 니 다.NUL 바 이 트 를 포함 하여 비 ASCII 문 자 를 포함 할 수 있 습 니 다.이 문자열 의 길 이 는 해시 대상 의 digest 를 통과 할 수 있 습 니 다.크기 속성 획득;한편,hexdigest()방법 이 되 돌려 주 는 요약 정 보 는 16 진수 형식의 문자열 입 니 다.이 문자열 에는 16 진수 의 숫자 만 포함 되 어 있 고 길 이 는 digest()가 결 과 를 되 돌려 주 는 길이 의 2 배 입 니 다.이 는 메 일의 안전 한 상호작용 이나 다른 바 이 너 리 가 아 닌 환경 에서 사용 할 수 있 습 니 다.
    
    #!/usr/bin/env python
    # coding=utf-8
    __author__ = 'Luzhuo'
    __date__ = '2017/5/19'
    # hash_demo.py Hash    (    )
    #   : MD5, SHA1 SHA224 SHA256 SHA384 SHA512
    
    
    import hashlib
    
    
    def hash_demo():
      m = hashlib.md5()
      m.update(b"hello")
      m.update(b"world!") # = hello + world!
    
      hash_hex = hashlib.sha3_512(b"luzhuo.me").hexdigest()
    
      print(m.digest_size)
      print(m.digest()) #    hash
      print(m.hexdigest()) #     hash
      print(hash_hex)
    
      #     
      hash_bytes = hashlib.pbkdf2_hmac('sha256', b'luzhuo.me', b'80', 100000)
      print(hash_bytes)
    
     
    
    def hash_func():
      # hashlib.new(name[, data]) //   hashlib(   ), name=   , data:  
      hash = hashlib.new('ripemd160', b'luzhuo.me')
    
      #   
      dics = hashlib.algorithms_guaranteed #        hash     
      dics = hashlib.algorithms_available #  Python       hash     ,    new() ,    
    
      # hashlib.pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None) //      hash_name:hash  , password:  , salt: , iterations:    , dklen:    
      hash_bytes = hashlib.pbkdf2_hmac('sha256', b'luzhuo.me', b'80', 100000)
    
      # hash  
      num = hash.digest_size # hash     
      num = hash.block_size # hash         
      strs = hash.name # hash  ,    new()  
      hash.update(b"data") #       hash.update(a) hash.update(b) == hash.update(a+b)
      hash_bytes = hash.digest() #   hash
      hash_str = hash.hexdigest() # 16     hash
      hash = hash.copy() #   hash    
    
     
    
    if __name__ == "__main__":
      hash_demo()
    
      # hash_func()
    
    
    hashmac 모듈 개요:
    앞에서 말 했 듯 이 HMAC 알고리즘 도 하나의 암호 화 알고리즘 이 고 위의 각종 해시 알고리즘/해시 알고리즘 을 바탕 으로 합 니 다.다만 연산 과정 에서 키 를 사용 하여 안전성 을 강화 할 수 있 습 니 다.hmac 모듈 은 HAMC 알고리즘 을 실현 하여 해당 하 는 함수 와 방법 을 제공 하고 hashlib 가 제공 하 는 api 와 대체적으로 일치 합 니 다.
    hmac 모듈 사용 절차:
    hmac 모듈 모듈 의 사용 절 차 는 hashlib 모듈 의 사용 절차 와 대체적으로 일치 합 니 다.다만 첫 번 째 단계 에서 hmac 대상 을 가 져 올 때 hmac.new()함수 만 사용 할 수 있 습 니 다.hmac 모듈 은 구체 적 인 해시 알고리즘 에 대응 하 는 함 수 를 제공 하지 않 아 hmac 대상 을 가 져 올 수 있 습 니 다.
    
    #!/usr/bin/env python
    # coding=utf-8
    __author__ = 'Luzhuo'
    __date__ = '2017/5/19'
    # hmac_demo.py HMAC  
    #  hashlib        key
    
    import hmac
    
    
    def hmac_demo():
      #   
      h = hmac.new(b"net")
      h.update(b"luzhuo.me")
      h_str = h.hexdigest()
      print(h_str)
    
      #     
      boolean = hmac.compare_digest(h_str, hmac.new(b"net", b"luzhuo.me").hexdigest())
      print(boolean)
    
     
    
    def hmac_func():
      #   key   ,      
      # hmac.new(key, msg=None, digestmod=None) //     hmac  , key: , msg:update(msg), digestmod:hash  ( hashlib.new())(  md5)
      hc = hmac.new(b"key")
    
      # hmac  
      hc.update(b"msg") #       hc.update(a) hc.update(b) == hc.update(a+b)
      hash_bytes = hc.digest() #   hash
      hash_str = hc.hexdigest() # 16  hash   
      hc = hc.copy() #   hmac  
      num = hc.digest_size # hash  
      num = hc.block_size # hash       
      strs = hc.name # hash  
      # hmac.compare_digest(a, b) //     hash      ,     : str / bytes-like object, ( :    ,     a==b)
      boolean = hmac.compare_digest(hmac.new(b"net", b"luzhuo.me").digest(), hmac.new(b"net", b"luzhuo.me").digest())
    
     
    
    
    if __name__ == "__main__":
      hmac_demo()
    
      # hmac_func()
    
    
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기