5.1 hashlib.py

  • Post author:
  • Post category:其他


5.1 hashlib.py
#!/usr/bin/python
# -*- encoding: utf-8

import hashlib


if __name__ == "__main__":
    md5 = hashlib.md5()
    md5.update('This is a sentence.'.encode(encoding='utf-8'))
    md5.update('This is a second sentence.'.encode())
    print (u'不出意外,这个将是“乱码”:', md5.digest())
    print (u'MD5:', md5.hexdigest())

    md5 = hashlib.md5()
    md5.update('This is a sentence.This is a second sentence.')
    print (u'MD5:', md5.hexdigest())
    print (md5.digest_size, md5.block_size)
    print ('------------------')

    sha1 = hashlib.sha1()
    sha1.update('This is a sentence.')
    sha1.update('This is a second sentence.')
    print (u'不出意外,这个将是“乱码”:', sha1.digest())
    print (u'SHA1:', sha1.hexdigest())

    sha1 = hashlib.sha1()
    sha1.update('This is a sentence.This is a second sentence.')
    print (u'SHA1:', sha1.hexdigest())
    print (sha1.digest_size, sha1.block_size)
    print ('=====================')

    md5 = hashlib.new('md5', 'This is a sentence.This is a second sentence.')
    print (md5.hexdigest())
    sha1 = hashlib.new('sha1', 'This is a sentence.This is a second sentence.')
    print (sha1.hexdigest())

    print (hashlib.algorithms)

Q1:

md5.update('This is a sentence.')
TypeError: Unicode-objects must be encoded before hashing

As1:

注意update()必须指定要加密的字符串的字符编码

解决办法:

    md5.update('This is a sentence.'.encode(encoding='utf-8'))
    md5.update('This is a second sentence.'.encode())

相关知识


str.encode()

def encode(self, encoding: str = 'utf-8', errors: str = 'strict') Inferred type: (self: str, encoding: str, errors: str) -> bytes

参数:

encoding = 'utf-8'

表示以utf-8编码,即将

str

对象以你选定的编码方式进行编码,

errors=

默认为

strict

,即会抛出编码异常的错误

UnicodeEncodeError

,可用

ignore

忽略

md5.update()
sha1.update()
hashlib.new()

都需要指定要加密的字符串的字符编码


hashlib

是一个集成

hash

加密或者

md5

加密以及

sha1(), sha224(), sha256(), sha384(), sha512(), blake2b(), and blake2s(). md5()

的库

主要功能是将字符串进行加密,或者对信息进行摘要。


MD5

主要对于任意长度的信息,经过

MD5

算法都能得到一段长度为128bit的摘要



版权声明:本文为huji6617原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。