Python hashlib模块实例使用详解


Posted in Python onDecember 24, 2019

这篇文章主要介绍了Python hashlib模块实例使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

hashlib模块主要的作用:

加密保护消息安全,常用的加密算法如MD5,SHA1等。

1、查看可用的算法有哪些

hashlib_algorithms.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import hashlib
# 始终可用的算法
print('始终可用的算法 : {}'.format(sorted(hashlib.algorithms_guaranteed)))
print('需要结合OpenSSL可用算法 : {}'.format(sorted(hashlib.algorithms_available)))

运行效果

[root@ mnt]# python3 hashlib_algorithms.py 
始终可用的算法 : ['blake2b', 'blake2s', 'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'sha512', 'shake_128', 'shake_256']
需要结合OpenSSL可用算法 : ['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']

2、md5加密算法(没有加盐)

hashlib_md5.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import hashlib
md5_obj = hashlib.md5()
md5_obj.update('123456'.encode('utf-8'))
print(md5_obj.hexdigest())

运行效果

[root@ mnt]# python3 hashlib_md5.py 
e10adc3949ba59abbe56e057f20f883e

3、md5加密算法(加盐)

hashlib_md5_salt.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import hashlib

salt = '1234'
md5_obj = hashlib.md5(salt.encode('utf-8'))
md5_obj.update('123456'.encode('utf-8'))
print(md5_obj.hexdigest())

运行效果

[root@ mnt]# python3 hashlib_md5_salt.py 
b38e2bf274239ff5dd2b45ee9ae099c9

4、sha1加密算法

hashlib_sha1.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import hashlib
sha1_obj = hashlib.sha1()
sha1_obj.update('123456'.encode('utf-8'))
print(sha1_obj.hexdigest())
hashlib_sha1.py

运行效果

[root@ mnt]# python3 hashlib_sha1.py 
7c4a8d09ca3762af61e59520943dc26494f8941b

5、按加密算法名字进行动态加密(即hashlib.new(‘算法名字'))

hashlib_new.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import hashlib
import argparse

lorem = 'Hello World'

parser = argparse.ArgumentParser('hashlib Demo')
parser.add_argument(
  'hash_name',
  choices=hashlib.algorithms_available,
  help='请输入hashlib的名字'
)

parser.add_argument(
  'data',
  nargs='?',
  default=lorem,
  help='请输入要加密的数据'
)

args = parser.parse_args()
h = hashlib.new(args.hash_name)
h.update(args.data.encode('utf-8'))
print(h.hexdigest())

运行效果

[root@ mnt]# python3 hashlib_new.py md5 123456
e10adc3949ba59abbe56e057f20f883e

[root@ mnt]# python3 hashlib_new.py sha1 123456
7c4a8d09ca3762af61e59520943dc26494f8941b

[root@ mnt]# python3 hashlib_new.py sha256 123456
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92


[root@mnt]# python3 hashlib_new.py sha512 123456
ba3253876aed6bc22d4a6ff53d8406c6ad864195ed144ab5c87621b6c233b548baeae6956df346ec8c17f5ea10f35ee3cbc514797ed7ddd3145464e2a0bab413

6、大文件切片md5加密算法

hashlib_update.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import hashlib

content = '''Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
aute irure dolor in reprehenderit in voluptate velit esse cillum
dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.'''

#一次性加密:缺点文件大的话,加载到内存会导致内存溢出
h = hashlib.md5()
h.update(content.encode('utf-8'))
all_at_once = h.hexdigest()

#利用生成器,切片加密,对大文件加密有用
def chunkize(size, text):
  start = 0
  while start < len(text):
    chuck = text[start:start + size]
    yield chuck
    start += size
  return

#一行一行加密
h = hashlib.md5()
for chunk in chunkize(64,content.encode(('utf-8'))):
  h.update(chunk)
line_by_line = h.hexdigest()

print('一性次加密结果 : ',all_at_once)
print('一行一行加密结果 : ',line_by_line)

运行效果

[root@ mnt]# python3 hashlib_update.py 
一性次加密结果 : 3f2fd2c9e25d60fb0fa5d593b802b7a8
一行一行加密结果 : 3f2fd2c9e25d60fb0fa5d593b802b7a8

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
python实现按任意键继续执行程序
Dec 30 Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
python语音识别实践之百度语音API
Aug 30 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
Python开发网站目录扫描器的实现
Feb 21 Python
如何用Python来理一理红楼梦里的那些关系
Aug 14 Python
Python利用PyExecJS库执行JS函数的案例分析
Dec 18 Python
python如何写出表白程序
Jun 01 Python
Pycharm安装python库的方法
Nov 24 Python
Python学习开发之图形用户界面详解
Aug 23 Python
Python实现使用dir获取类的方法列表
Dec 24 #Python
django数据模型on_delete, db_constraint的使用详解
Dec 24 #Python
Python中filter与lambda的结合使用详解
Dec 24 #Python
节日快乐! Python画一棵圣诞树送给你
Dec 24 #Python
Python 3 使用Pillow生成漂亮的分形树图片
Dec 24 #Python
python保存log日志,实现用log日志画图
Dec 24 #Python
Django 限制访问频率的思路详解
Dec 24 #Python
You might like
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
PHP 中常量的知识整理
2017/04/14 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
jQuery实现类似老虎机滚动抽奖效果
2015/08/06 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
JS实现移动端点击按钮复制文本内容
2019/07/28 Javascript
python实现kMeans算法
2017/12/21 Python
TensorFlow中权重的随机初始化的方法
2018/02/11 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
Pycharm中import torch报错的快速解决方法
2020/03/05 Python
css3 transform属性详解
2014/09/30 HTML / CSS
北美主要的汽车零部件零售商:AutoShack.com
2019/02/23 全球购物
化验室技术员岗位职责
2013/12/24 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
公务员保密承诺书
2014/03/27 职场文书
公务员更新知识培训实施方案
2014/03/31 职场文书
学校端午节活动方案
2014/08/23 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
四年级小学生评语
2014/12/26 职场文书
撤诉书怎么写
2015/05/19 职场文书
食品卫生管理制度
2015/08/06 职场文书
深入理解Vue的数据响应式
2021/05/15 Vue.js