hashlib模块学习笔记

2024-05-12 01:48
文章标签 模块 学习 笔记 hashlib

本文主要是介绍hashlib模块学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

该模块实现了许多不同安全散列和消息摘要算法的通用接口。

概要

提供了以下那么多 信息摘要算法,本文不对算法过多讲解, 只是简单说一下,如何使用hashlib 模块提供的接口, 调用函数. 至于算法的实现这里没有涉及.

__always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512','blake2b', 'blake2s',                             'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512','shake_128', 'shake_256')                                                    
1. 来看一下demon
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@author: Frank 
@contact: frank.chang@shoufuyou.com
@file: haslib_test.py
@time: 2018/7/7 上午8:24"""# importimport hashlib__always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512','blake2b', 'blake2s','sha3_224', 'sha3_256', 'sha3_384', 'sha3_512','shake_128', 'shake_256')                                                             def md5_test():md5 = hashlib.md5()data = 'I am frank. hello everyone!'.encode('utf-8')md5.update(data)# 占用多少bytesprint(md5.digest_size)# 返回二进制的加密结果print(md5.digest())# 返回十六进制的机密结果print(md5.hexdigest())def sha256_test():sha = hashlib.sha256()data = 'I am frank. hello everyone!'.encode('utf-8')sha.update(data)print(sha.digest())print(sha.hexdigest())def sha3_512_test():sha3_512 = hashlib.sha3_512()data = 'I am frank. hello everyone!'.encode('utf-8')sha3_512.update(data)# 返回二进制的加密结果print(sha3_512.digest())# 返回十六进制的机密结果print(sha3_512.hexdigest())if __name__ == '__main__':md5_test()print("***" * 20)sha256_test()print("***" * 20)sha3_512_test()

常用方法 介绍

  1. hash.update(arg)

Update the hash object with the object arg, which must be interpretable as a buffer of bytes. Repeated calls are equivalent to a single call with the concatenation of all the arguments: m.update(a); m.update(b) is equivalent to m.update(a+b).

用来更新 要加密的参数
注意: update()方法现在只 接受bytes类型的数据
hash.update(b'frank'), hash.update(b'hello') == hash.update(b'frankhello')

  1. hash.digest()

Return the digest of the data passed to the update() method so far. This is a bytes object of size digest_size which may contain bytes in the whole range from 0 to 255.

返回二进制的加密结果

  1. hash.hexdigest()

Like digest() except the digest is returned as a string object of double length, containing only hexadecimal digits. This may be used to exchange the value safely in email or other non-binary environments.

返回十六进制的加密结果

  1. hash.copy()

Return a copy (“clone”) of the hash object. This can be used to efficiently compute the digests of data sharing a common initial substring.

复制一个hash 对象

  1. hash.digest_size

The size of the resulting hash in bytes. 属性, 返回 hash 结果多少 bytes

  1. hash.block_size

The internal block size of the hash algorithm in bytes. 属性 , 返回 内部块 占用 多少 bytes

2. 还可以用传字符串 来 调用算法. 生成摘要

1 . 通过调用 hashlib.new(str, data)

import hashlib
h=hashlib.new('md5',b'frank')  
h.digest()
Out[42]: b'&%<Pt\x1f\xaa\x9c.+\x83gs\xc6\x9f\xe6'
h.digest_size
Out[43]: 16
'&%<Pt\x1f\xaa\x9c.+\x83gs\xc6\x9f\xe6'.__len__()
Out[44]: 16
    always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512','blake2b', 'blake2s','sha3_224', 'sha3_256', 'sha3_384', 'sha3_512',)for algorithm in always_supported:try:h = hashlib.new(algorithm, b"frank")except TypeError as e:print(e)print(algorithm)else:print(algorithm, end='  ')print(h.digest())

结果如下

md5  b'&%<Pt\x1f\xaa\x9c.+\x83gs\xc6\x9f\xe6'
sha1  b"\x86\xa8\xc2\xda\x85'\xa1\xc6\x97\x8b\xdc\xa6\xd7\x98o\xe1J\xe1G\xfe"
sha224  b':D/\x05\xd1)\xa9\xbf\x97\xa2\xe0\xa2\xd4\xefl\xc1\xf2\x0b\x1b1\xff\xa8w\xb4\x85\x04p\xd0'
sha256  b"wdoZO1fcv'\xab\xe9\x98\xe7\xa1G\x0f\xe7-\x8bC\x0f\x06}\xaf\xa8bc\xf1\xf2?\x94"
sha384  b'\x04\x14\xbe\xed\xbb\xd8NV\xcaY\xb0\x0c\xe69\x8f\x05\x81`\xdfo\xef\xfe]\xf18C\x1d\xdf\x98\xef\xa8\x8f\x82;\xacGjQ\xdb\xfe\xf1H\xce,Wo}\x0f'
sha512  b'\x19\xb7\x02\xb6\xf1\xb15\xca\x00\x9c\xe1\xdf\x13\xd8G8\xb7L\xb7DZ\xf6=\xd3o/\xde\xfew\xdf\x83\xfc\xde\xcf0}\xb56\t5($,<\xe5*\x93PEZ\xcb\x1e\x8a\xd9\x06\xfc\xcd@\xfd\tZ\xba\xb4\xf1'
blake2b  b'\xbe5\x9e\xe2\x9c\x96\x95`?\x91\x89\xc5\xa8\x12\xdc\xd24\xf2\xd3\x0c}\xeb\xaa\xf5\xe4h|\xc0F[\r@\xbe\xe2)\x03\xbc~C\xb8"2S\xbc\xb6\xe3\xcb\xf2\xa9\xd6\x02\xaf\xb2\x19\x1cn\xa6"\xca\xf6G\xcd\x9f\x84'
blake2s  b'({E\x0c\x1ed\xfd\xe4}@\xd9\x91`\xa6\x81O(V\xa3$l\x03\x8f\x879\xeb\x89\xe2\x97\x13\xf0\xcd'
sha3_224  b'\x07\xd0(\xa1\xda\x99\x8a\xbf\x98\xb5\x835\xbf\x99\xff\xa0\xcf\x80\xab\xeb\xab\x0ec\x9d\x16\xbd\xa1\x8d'
sha3_256  b"'\x1e9\n\xf7}\x17#\xcd\x03\xfa\x18\xb9\x10C3\xe1\x1c\xee/\xbd\xd8\x02\t\x00\x8a\x1d|\x0f\xba\x14\x04"
sha3_384  b'\x05C\x88,8\x8b\xbb\xbf\x1e^~\x88\xc3\xd6H*\xad\xfc\xf2\xca\xb4\xec\xc0\x12B\x00\xaa\xd6\x84\xe6n\x81\xa8\xcez\x1dT|\x07Hh\xdb\xbf?\xa8\xc0\xeb\xb1'
sha3_512  b"\xff\xfd\xbd\xe6\xe3\x0f5\x02\xab\xcb\x83\x8e\x07C\xad\xbc\xaeI\xfb'U\xcb\xd9\xd3\x8a\x87\xaa\xb9ZU\xc9\xf7\xbbfH\xf5\xc2j~L\x91R\x86S\xef\x8a\xc1\x0e\xef\xf6\x02d\x0b\xa7\xdc\x12\xac\xe0\xfc\xd1`\x9b7*"
3. 'shake_128', 'shake_256'

对于 shake_128 , shake_256 算法 需要传入参数 一个 length

The shake_128() and shake_256() algorithms provide variable length digests with length_in_bits//2 up to 128 or 256 bits of security. As such, their digest methods require a length. Maximum length is not limited by the SHAKE algorithm.shake.digest(length)
Return the digest of the data passed to the update() method so far. This is a bytes object of size length which may contain bytes in the whole range from 0 to 255.shake.hexdigest(length)
Like digest() except the digest is returned as a string object of double length, containing only hexadecimal digits. This may be used to exchange the value safely in email or other non-binary environments.

if __name__ == '__main__':# h = hashlib.new('shake_128', b'frank')h = hashlib.new('shake_256', b'frank')print(h.digest(16))print(h.hexdigest(16))print(h.hexdigest(16).__len__()) # 结果如下
# b'~\xf6\xfb\xe6\x8f\xc9\xcf\xa7D\x9c\x97\xfa\xad_\xa16'
# 7ef6fbe68fc9cfa7449c97faad5fa136
# 32
4 blake2b', 'blake2s, python3.6 添加

可以用来作网站的安全认证.

https://docs.python.org/3/library/hashlib.html#hashlib.blake2b

def  hashlib_blask2b_test():# 指定长度h = hashlib.blake2b(digest_size=16)h.update(b'frank')print(h.hexdigest())def hashlib_blaske2b_key():# 可以指定keyh = hashlib.blake2b(key=b'this is your name',digest_size=16)h.update(b'frank')print(h.hexdigest())if __name__ == '__main__':hashlib_blask2b_test()hashlib_blaske2b_key()
5 总结

简单说明 hashlib 模块的使用, 当然还有一些没有涉及到.具体更多内容请参考官网.

参考资料

https://zh.wikipedia.org/wiki/SHA家族
https://docs.python.org/3/library/hashlib.html
http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/hashlib.html
http://www.liujiangblog.com/course/python/58

分享快乐,留住感动.2018-07-07 22:30:45 --frank

这篇关于hashlib模块学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981266

相关文章

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Python模块导入的几种方法实现

《Python模块导入的几种方法实现》本文主要介绍了Python模块导入的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录一、什么是模块?二、模块导入的基本方法1. 使用import整个模块2.使用from ... i