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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
解读Python中degrees()方法的使用
May 18 Python
Python+Selenium自动化实现分页(pagination)处理
Mar 31 Python
30秒轻松实现TensorFlow物体检测
Mar 14 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
python 魔法函数实例及解析
Sep 25 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
Oct 25 Python
Python Lambda函数使用总结详解
Dec 11 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
Python3搭建http服务器的实现代码
Feb 11 Python
浅析Python OpenCV三种滤镜效果
Apr 11 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
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
JavaScript动态添加style节点的方法
2015/06/09 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
vue 组件基础知识总结
2021/01/26 Vue.js
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
Python检测网站链接是否已存在
2016/04/07 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
python实现堆和索引堆的代码示例
2018/03/19 Python
python删除不需要的python文件方法
2018/04/24 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
python中数字是否为可变类型
2020/07/08 Python
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
巴西最大的体育用品商城:Netshoes巴西
2016/11/29 全球购物
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
秋季婚礼证婚词
2014/01/11 职场文书
省级青年文明号申报材料
2014/05/23 职场文书
Python字符串格式化方式
2022/04/07 Python
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers