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中的XML库4Suite Server的介绍
Apr 14 Python
python获取本机外网ip的方法
Apr 15 Python
python搭建微信公众平台
Feb 09 Python
python中实现k-means聚类算法详解
Nov 11 Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
python 列表删除所有指定元素的方法
Apr 19 Python
python已协程方式处理任务实现过程
Dec 27 Python
python中提高pip install速度
Feb 14 Python
python内打印变量之%和f的实例
Feb 19 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
Jan 15 Python
python3.9之你应该知道的新特性详解
Apr 29 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加密解密的代码
2007/07/16 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
Laravel5.1框架路由分组用法实例分析
2020/01/04 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
jquery cookie插件代码类
2009/05/26 Javascript
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python中super()函数简介及用法分享
2016/07/11 Python
Golang与python线程详解及简单实例
2017/04/27 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
2020/07/02 Python
Python读写锁实现实现代码解析
2020/11/28 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
古驰英国官网:GUCCI英国
2020/03/07 全球购物
大学生会计职业生涯规划范文
2014/02/28 职场文书
承租经营合作者协议书
2014/10/01 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
JS实现简单的九宫格抽奖
2022/06/28 Javascript