Python学习笔记:MD5加密
MD5
算法严格上来说,不算是一种加密算法,而是一种哈希算法。
在 MD5
中没有密钥和密文的概念,没有解密一说。
MD5
是一种有损压缩,非对称加密算法,无法进行还原。
网上关于 MD5
的解密大部分都是码表匹对,而不是破解。
在 Python3
标准库中,已经移除了 md5
, 关于 hash
加密算法都放在 hashlib
标准库中,例如:SHA1/SHA224/SHA256/SHA384/SHA512
和 MD5
算法等。
hashlib
库的 hash
算法中,提供众多加密算法:
sha1()
sha224()
sha256()
sha384()
sha512()
blake2b()
blake2s()
md5()
这些方法通过统一接口返回一个对象。
一、针对英文md5加密
# 方法一
import hashlib
m = hashlib.md5()
m.update(b'123')
m.hexdigest() # '202cb962ac59075b964b07152d234b70'
# 方法二
hashlib.md5(b'123').hexdigest() # '202cb962ac59075b964b07152d234b70'
# 方法三
hashlib.new('md5', b'123').hexdigest() # '202cb962ac59075b964b07152d234b70'
二、针对中文md5加密
需先将中文转换成 UTF-8
格式,再进行 md5
加密。
import hashlib
data = r'你好'
hashlib.md5(data.encode(encoding='UTF-8')).hexdigest() # '7eca689f0d3389d9dea66ae112e5cfd7'
'''
encoding='UTF-8'
encoding='GBK'
encoding='GB2312'
encoding='GB18030'
'''
三、hashlib函数解析
1.hashlib.new方法
一般性方法,使用语法为:
hashlib.new(name, [data])
# name 哈希加密算法名称 例如:md5
# data 需要加密的数据 可忽略 在之后update时传入数据即可
实例:
import hashlib
m = hashlib.new('md5')
m.update(b'123')
m.hexdigest() # '202cb962ac59075b964b07152d234b70'
2.hashlib.algorithms_guaranteed/algorithms_available方法
可以使用 hashlib.algorithms_guaranteed
或者 hashlib.algorithms_available
这两个内置属性查看 hashlib
支持哪些加密算法。
hashlib.algorithms_guaranteed
是 hashlib.algorithms_available
的子集。
import hashlib
hashlib.algorithms_guaranteed
{'blake2b',
'blake2s',
'md5',
'sha1',
'sha224',
'sha256',
'sha384',
'sha3_224',
'sha3_256',
'sha3_384',
'sha3_512',
'sha512',
'shake_128',
'shake_256'}
import hashlib
hashlib.algorithms_available
{'DSA',
'DSA-SHA',
'MD4',
'MD5',
'RIPEMD160',
'SHA',
'SHA1',
'SHA224',
'SHA256',
'SHA384',
'SHA512',
'blake2b',
'blake2s',
'dsaEncryption',
'dsaWithSHA',
'ecdsa-with-SHA1',
'md4',
'md5',
'ripemd160',
'sha',
'sha1',
'sha224',
'sha256',
'sha384',
'sha3_224',
'sha3_256',
'sha3_384',
'sha3_512',
'sha512',
'shake_128',
'shake_256',
'whirlpool'}
3.hashlib.update方法
传入参数对象以更新哈希对象。
该方法只支持 byte 类型,否则会报错。
需要在参数前添加 b
进行类型转换。
import hashlib
m = hashlib.md5()
m.update('123456')
# TypeError: Unicode-objects must be encoded before hashing
m.update(b'123456')
重复调用 update(arg)
方法,会将传入的 arg 参数进行拼接,而不是覆盖。
m.update(a); m.update(b)
等价于 m.update(a+b)
。
import hashlib
m = hashlib.md5()
m.update(b'123')
m.hexdigest() # '202cb962ac59075b964b07152d234b70'
m.update(b'456')
m.hexdigest() # 'e10adc3949ba59abbe56e057f20f883e'
hashlib.md5(b'123456').hexdigest() # 'e10adc3949ba59abbe56e057f20f883e'
为了防止每次拼接干扰,每次都需要重新实例化。
重新定义:md5 = hashlib.md5()
。
4.hashlib.hexdigest方法
hex
代表十六进制。
该方法将 hash
中的数据转换成数据格式,其中只包含十六进制的数字。
四、针对DataFrame某列进行加密
先构造函数,再针对该列进行 apply
操作。
import hashlib
def md5_crypt(txt):
m = hashlib.md5()
m.update(str(txt).encode()) # 转换为字符型 b
return m.hexdigest()
data['nes_col'] = data['col'].apply(md5_crypt)
参考链接:python3中的md5加密
参考链接:python中的md5加密
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2019-10-14 电商数据分析基础指标体系(8类)
2019-10-14 R语言学习笔记:读取前n行数据