首页 » 网站建设 » phpmd5加密年夜写技巧_Python3中的md5加密实现

phpmd5加密年夜写技巧_Python3中的md5加密实现

访客 2024-11-05 0

扫一扫用手机浏览

文章目录 [+]

MD5先容

在写网络爬虫仿照上岸时,碰着提交表单时是一串数字和字母,才知道经由了md5加密。

phpmd5加密年夜写技巧_Python3中的md5加密实现

MD5择要算法:(英语:MD5 Message-Digest Algorithm),一种被广泛利用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完全同等。
MD5是最常见的择要算法,速率很快,天生结果是固定的128 bit字节,常日用一个32位的16进制字符串表示。

phpmd5加密年夜写技巧_Python3中的md5加密实现
(图片来自网络侵删)

择要算法的运用:

任何许可用户登录的网站都会存储用户登录的用户名和口令。
用户名和口令存到数据库表中。

name | password--------+----------chengf | 123456code | abc999

如果以明文保存用户口令,如果数据库透露,所有用户的口令就落入黑客的手里。
此外,网站运维职员是可以访问数据库的,也便是能获取到所有用户的口令。

精确的保存口令的办法是不存储用户的明文口令,而是存储用户口令的择要,比如MD5:

username | password---------+---------------------------------chengf | e10adc3949ba59abbe56e057f20f883ecode | 878ef96e86145580c38c87f0410ad153

当用户登录时,首先打算用户输入的明文口令的MD5,然后和数据库存储的MD5比拟,如果同等,解释口令输入精确,如果不一致,口令肯定缺点。
这样纵然运维职员能访问数据库,也无法获知用户的明文口令。

02

hashlib先容

Python的hashlib供应了常见的择要算法,如MD5,SHA1等等。

择要算法又称哈希算法、散列算法。
它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(常日用16进制的字符串表示)。

在python3的标准库中,已经移除了md5模块,而关于hash加密算法都放在hashlib这个标准库中,如SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法等。

https://docs.python.org/3/library/hashlib.html?highlight=hashlib#credits

03 利用hashlib库进行md5加密

# @Time : 2020/6/1 21:50# @Author : 编程技能圈# @Site : # @File : hash.py# @Software: PyCharmimport hashlib# 由于MD5模块在python3中被移除# 在python3中利用hashlib模块进行md5操作import hashlib# 待加密信息str = 'this is a md5 test.'# 创建md5工具m = hashlib.md5# Tips# 此处必须encode# 若写法为m.update(str) 报错为:Unicode-objects must be encoded before hashing# 由于python3里默认的str是unicode# 或者 b = bytes(str, encoding='utf-8'),浸染相同,都是encode为bytesb = str.encode(encoding='utf-8')m.update(b)str_md5 = m.hexdigestprint('MD5加密前为 :' + str)print('MD5加密后为 :' + str_md5)# 另一种写法:b‘’前缀代表的便是bytesstr_md5 = hashlib.md5(b'this is a md5 test.').hexdigestprint('MD5加密后为 :' + str_md5)

运行结果

注:对英文加密,可以利用b' '前缀,如果要对中文加密,利用b' '前缀来写会报错,缘故原由在于字符转码问题,b' '在python中只能对ASCII字符进行转码。

要用encode(encoding='utf-8')将中文转码成UTF-8:

>>> import hashlib>>> data = '你好'>>> hashlib.md5(data.encode(encoding='UTF-8')).hexdigest'7eca689f0d3389d9dea66ae112e5cfd7'

其它中文编码md5加密

可以看到GBK、GB2312、GB18030编码的加密结果相同,而与UTF-8的加密结果不同。

>>> hashlib.md5('你好'.encode(encoding='UTF-8')).hexdigest'7eca689f0d3389d9dea66ae112e5cfd7'>>> hashlib.md5('你好'.encode(encoding='GBK')).hexdigest'b94ae3c6d892b29cf48d9bea819b27b9'>>> hashlib.md5('你好'.encode(encoding='GB2312')).hexdigest'b94ae3c6d892b29cf48d9bea819b27b9'>>> hashlib.md5('你好'.encode(encoding='GB18030')).hexdigest'b94ae3c6d892b29cf48d9bea819b27b9'

- end -

标签:

相关文章

微信第三方登录便捷与安全的完美融合

社交平台已成为人们日常生活中不可或缺的一部分。微信作为我国最受欢迎的社交软件之一,拥有庞大的用户群体。为了方便用户在不同平台间切换...

网站建设 2025-02-18 阅读1 评论0

广东高速代码表解码高速公路管理智慧

高速公路作为国家交通动脉,连接着城市与城市,承载着巨大的物流和人流。广东作为我国经济大省,高速公路网络密布,交通流量巨大。为了更好...

网站建设 2025-02-18 阅读1 评论0