hashlib模块

简介:

hashlib模块是一个提供了字符串加密功能的模块,包含MD5和SHA的加密算法。具体的加密支持有:

MD5,sha1,sha224,sha256, sha384, sha512, blake2bblake2ssha3_224, sha3_256, sha3_384, sha3_512, shake_128, shake_256

该模块在用户登录认证方面应用广泛,对文本加密也很常见。文件和文件之间的校验。该模块调用简单,接下来来看看。

基本调用

  • 基本步骤,加密算法使用方法都一样的。以MD5加密为例:

    1. 创建一个MD5加密对象
    2. 对字符串进行转换为byte后,进行算法加密
    3. 进行16进制的显示
  • 代码:
# 导入hashlib模块
import hashlib # 实例化一个MD5的加密对象
md5 = hashlib.md5()
# 调用MD5对象的update方法,进行字符串加密(这里要传入的是编码后字节)
md5.update('hello'.encode('utf8'))
# 返回一个双倍长度,仅包含16进制数字的字符串
ret = md5.hexdigest()
# 打印加密返回后的字符串
print(ret)

可以创建的加密算法有:md5,sha1, sha224, sha256, sha384, sha512

# 实例化一个MD5加密对象
md5 = hashlib.md5()
# 实例化一个sha1加密对象
sha1 = hashlib.sha1()
# 实例化一个sha224加密对象
sha224 = hashlib.sha224()
# 实例化一个sha256加密对象
sha256 = hashlib.sha256()

如果数据量较大,可以分块多次调用update(),最后的计算结果都是一样的

md5 = hashlib.md5()
md5.update('how to use md5 in '.encode('utf8'))
md5.update('python hashlib?'.encode('utf8'))
print(md5.hexdigest()) new_md5 = hashlib.md5()
new_md5.update('how to use md5 in python hashlib?'.encode('utf8'))
print(new_md5.hexdigest()) # 结果
d26a53750bc40b38b65a520292f69306
d26a53750bc40b38b65a520292f69306

加盐

注:但是通常这样的密码就相当于一个固定的加密字符串,如果有的人专门写一个这样的字典,里面存储了各种字符串组合及对应的MD5加密字符串,然后去暴力测试,这样也就有可能计算出我们真正的密码,所以,要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5,这一方法通过对原始口令加一个复杂字符串来实现,俗称“加盐”:

代码:

# 没有加盐的字符串加密
new_md5 = hashlib.md5()
new_md5.update('how to use md5 in python hashlib?'.encode('utf8'))
print(new_md5.hexdigest()) # 加盐以后的字符串加密
new_md5 = hashlib.md5('我的梦想是冲出地球!'.encode('utf8')) # 加盐
new_md5.update('how to use md5 in python hashlib?'.encode('utf8'))
print(new_md5.hexdigest()) # 结果
d26a53750bc40b38b65a520292f69306
52841008c37295e291f426bbabe56f15

动态加盐

# 意义就是在加盐的地方使用一个变量比如,用户名
user = input('user>>: ')
pwd = input('pwd>>: ') md5 = hashlib.md5('{0}的梦想是去全世界各种地方逛逛'.format(user).encode('utf8'))
md5.update(pwd.encode('utf8')) # 更新密码
print(md5.hexdigest())

校验文件时,由于文件过大,计算MD5值的方法:

def file_get_md5(file):
md5 = hashlib.md5()
with open(file, mode='rb') as fp: # 打开文件
for line in fp: # 循环
md5.update(line) # 每次更新
return md5.hexdigest()

最新文章

  1. SharePoint2016母版页的直接依赖项的数目限制超过10的限制解决方案Direct Dependencies Limit with Master page User Controls
  2. IIS部署站点相关经验总结
  3. 项目管理知识框架PMBOK(文字版)
  4. 修改mysql表结构,添加一个主键索引自增字段,修改原来的主字段为普通字段
  5. 第九章 C语言在嵌入式中的应用
  6. JQuery 事件器的介绍
  7. C# Web对文件的管理
  8. 带鉴权信息的SIP呼叫
  9. 搭建环境Visual Studio 2013 社区版
  10. [转]RadStudio DELPHI/C++ BUILDER Berlin 10.1 Update2安装破解教程
  11. 详解Struts2拦截器机制
  12. dynamic_cast 转换示例
  13. a标签文字选中后的颜色样式更改
  14. 2019年一次java知识点总结
  15. ESP WIFI
  16. 手把手教你用 Git(转)
  17. day7大纲
  18. 调用飞信HTTP接口给自己发短信
  19. The class cn.itcast.web.common.util.UtilFuns specified in TLD for the function selffn:htmlNewline cannot be found: cn.itcast.web.common.util.UtilFuns
  20. ThinkPHP3.2开发仿京东商城项目实战视频教程

热门文章

  1. 洛谷 P2580 于是他错误的点名开始了 题解
  2. PV UV TPS QPS
  3. Oracle数据库限定特定用户 特定IP 登录
  4. Postgresql 日志相关
  5. 1-git的安装和基本使用
  6. [Luogu] 外星密码
  7. Bzoj 3673: 可持久化并查集 by zky(主席树+启发式合并)
  8. Bzoj 2588 Spoj 10628. Count on a tree(树链剖分LCA+主席树)
  9. 【IOI2019】2048矩形模拟
  10. TCP数据的传输过程