hashlib 是一个提供了一些流行的hash算法的 Python 标准库.其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512等常用算法

MD5加密算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import hashlib
""" MD5加密 """
hash_md5 = hashlib.md5()
hash_md5.update(b"hello")#b 表示byte类型
hash_md5.update(b"world")
print(hash_md5.hexdigest())
""" 十六进制MD5加密结果"""
print(hash_md5.digest())
"""  二进制MD5加密结果 """
""" 分几次update的参数加密结果和拼接一起加密结果一样"""
hashmd5 = hashlib.md5()
hashmd5.update(b"helloworld")
print(hashmd5.hexdigest())
print(hashmd5.digest())

运行结果:

1
2
3
4
fc5e038d38a57032085441e7fe7010b0  --十六进制
b'\xfc^\x03\x8d8\xa5p2\x08TA\xe7\xfep\x10\xb0'  --二进制
fc5e038d38a57032085441e7fe7010b0
b'\xfc^\x03\x8d8\xa5p2\x08TA\xe7\xfep\x10\xb0'

SHA加密算发,常用256的,位数越长越安全

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import hashlib
 
print("hash1加密的二进制和十六进制结果")
hash1 = hashlib.sha1()
hash1.update(b"helloworld")
print(hash1.digest())
print(hash1.hexdigest())
 
print("hash256加密的二进制和十六进制结果")
hash256 = hashlib.sha256()
hash256.update(b"helloworld")
print(hash256.digest())
print(hash256.hexdigest())
 
print("hash384加密的二进制和十六进制结果")
hash384 = hashlib.sha384()
hash384.update(b"helloworld")
print(hash384.digest())
print(hash384.hexdigest())
 
print("hash512加密的二进制和十六进制结果")
hash512 = hashlib.sha512()
hash512.update(b"helloworld")
print(hash512.digest())
print(hash512.hexdigest())

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
hash1加密的二进制和十六进制结果
b'j\xdf\xb1\x83\xa4\xa2\xc9J/\x92\xda\xb5\xad\xe7b\xa4x\x89\xa5\xa1'
6adfb183a4a2c94a2f92dab5ade762a47889a5a1
hash256加密的二进制和十六进制结果
b'\x93j\x18\\\xaa\xa2f\xbb\x9c\xbe\x98\x1e\x9e\x05\xcbx\xcds+\x0b2\x80\xeb\x94D\x12\xbbo\x8f\x8f\x07\xaf'
936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af
hash384加密的二进制和十六进制结果
b"\x97\x98*[\x14\x14\xb9\x07\x81\x03\xa1\xc0\x08\xc4\xe3Rl'\xb4\x1c\xdb\xcf\x80y\x05`\xa4\x0f*\x9b\xf2\xedD'\xab\x14(x\x99\x15\xedK=\xc0|EK\xd9"
97982a5b1414b9078103a1c008c4e3526c27b41cdbcf80790560a40f2a9bf2ed4427ab1428789915ed4b3dc07c454bd9
hash512加密的二进制和十六进制结果
b'\x15\x94$MR\xf2\xd8\xc1+\x14+\xb6\x1fG\xbc.\xafP=m\x9c\xa8H\x0c\xae\x9f\xcf\x11/f\xe4\x96}\xc5\xe8\xfa\x98(^6\xdb\x8a\xf1\xb8\xff\xa8\xb8L\xb1^\x0f\xbc\xf86\xc3\xde\xb8\x03\xc1?7e\x9a`'
1594244d52f2d8c12b142bb61f47bc2eaf503d6d9ca8480cae9fcf112f66e4967dc5e8fa98285e36db8af1b8ffa8b84cb15e0fbcf836c3deb803c13f37659a60

中文的加密,需要编码encode()得到bytes类型,再进行加密操作

1
2
3
4
5
6
7
8
9
10
11
12
13
import hashlib
 
print("===MD5中文加密举例===")
china_md5 = hashlib.md5()
china_md5.update("中华人民共和国".encode(encoding="utf-8"))
print(china_md5.digest())
print(china_md5.hexdigest())
 
print("===SHA中文加密举例===")
china_sha = hashlib.sha256()
china_sha.update("中华人民共和国".encode(encoding="utf-8"))
print(china_sha.digest())
print(china_sha.hexdigest())

运行结果:

1
2
3
4
5
6
===MD5中文加密举例===
b'\x02_\xce\xab\x94\x18\xbe\x86\x06k`\xa7\x1b\xc7\x14\x85'
025fceab9418be86066b60a71bc71485
===SHA中文加密举例===
b'\xcak\x1e6\x84\xd5\xaa\xeec1\x90\xb1\x82\xce\xbb\x06\xd6%\xd2\x84\xfe\xc8\x9a\x95\x15 -v\xf4\xd6J?'
ca6b1e3684d5aaee633190b182cebb06d625d284fec89a9515202d76f4d64a3f

hmac 模块,它内部对我们创建 key 和 vlaue 再进行处理然后再加密

散列消息鉴别码,简称HMAC,是一种基于消息鉴别码MAC(Message Authentication Code)的鉴别机制。使用HMAC时,消息通讯的双方,通过验证消息中加入的鉴别密钥K来鉴别消息的真伪;

一般用于网络通信中消息加密,前提是双方先要约定好key,就像接头暗号一样,然后消息发送把用key把消息加密,接收方用key + 消息明文再加密,拿加密后的值 跟 发送者的相对比是否相等,这样就能验证消息的真实性,及发送者的合法性了。

hmac加密示例

1
2
3
4
5
6
7
8
9
10
11
import hmac
 
print("===hmac字符加密示例===")
hm = hmac.new(b"hello",b"world")
print("hmac二进制加密:",hm.digest())
print("hmac十六进制加密:",hm.hexdigest())
 
print("===hmac中文加密示例===")
ch = hmac.new("你好".encode(encoding="utf-8"),"世界".encode(encoding="utf-8"))
print("hmac二进制加密:",ch.digest())
print("hmac十六进制加密:",ch.hexdigest())

运行结果:

1
2
3
4
5
6
===hmac字符加密示例===
hmac二进制加密: b'\x0e%d\xb7\xe1\x00\xf044\x1e\xa4w\xc2?(;'
hmac十六进制加密: 0e2564b7e100f034341ea477c23f283b
===hmac中文加密示例===
hmac二进制加密: b'\xb0\x90\xbdU\xda:\xe1\xef\xa9fts@\xbf%\n'
hmac十六进制加密: b090bd55da3ae1efa966747340bf250a

Python3 hashlib模块和hmac 模块(加密)的更多相关文章

  1. 模块讲解---time模块,datetime模块,random模块,hashlib模块和hmac模块,typing模块,requests模块,re模块

    目录 1. 包 2. time模块   1. 优先掌握 2. 了解 3. datetime模块   1. 优先掌握 4. random模块   1. 优先掌握   2. 了解 5. hashlib模块 ...

  2. 第十章、hashlib模块和hmac模块

    目录 第十章.hashlib模块和hmac模块 一.hashlib模块 二.hash模块 第十章.hashlib模块和hmac模块 一.hashlib模块 hash是一种算法,接收传入的内容,经过运算 ...

  3. hashlib模块和hmac模块

    hashlib模块和hmac模块 hashlib模块 一.导入方式 import hashlib 二.作用 无论你丢什么字符串,他都会返回一串 固定长度的字符串 三.模块功能 3.1 经常使用 imp ...

  4. Python之数据加密与解密及相关操作(hashlib模块、hmac模块、random模块、base64模块、pycrypto模块)

    本文内容 数据加密概述 Python中实现数据加密的模块简介 hashlib与hmac模块介绍 random与secrets模块介绍 base64模块介绍 pycrypto模块介绍 总结 参考文档 提 ...

  5. Python标准库之hashlib模块与hmac模块

    hashlib模块用于加密相关的操作.在Python 3.x里代替了md5模块和sha模块,主要提供 SHA1.SHA224.SHA256.SHA384.SHA512 .MD5 算法.如果包含中文字符 ...

  6. SocketServer模块,hmac模块验证client合法性

    hmac模块: 1.模块初识: import hmac # h = hmac.new() #括号里要给它连个bytes类型,一个是自定义的secret_key,一个是你想进行加密的bytes # 密文 ...

  7. python 加密 hashlib与hmac模块

    https://www.jb51.net/article/128911.htm hashlib模块简介: hashlib模块为不同的安全哈希/安全散列(Secure Hash Algorithm)和 ...

  8. hashlib模块,hmac模块

    6.11自我总结 1.hashlib模块(文件传输中将传输内容用指定算法进行处理) hash是一种算法(Python3.版本里使用hashlib模块代替了md5模块和sha模块,主要提供 SHA1.S ...

  9. hmac模块和hashlib模块

    hmac模块和hashlib模块 一.hash是什么 ​ hash是一种算法(Python3.版本里使用hashlib模块代替了md5模块和sha模块,主要提供 SHA1.SHA224.SHA256. ...

随机推荐

  1. 三次握手 四次握手 与socket函数的关系

    “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览 ...

  2. 同步锁(synchronized)使用三要素

    1.代码被多个线程访问 2.代码中有共享的数据 3.共享数据被多个语句操作

  3. BZOJ4784 ZJOI2017仙人掌(树形dp+dfs树)

    首先考虑是棵树的话怎么做.可以发现相当于在树上选择一些长度>=2的路径使其没有交,同时也就相当于用一些没有交的路径覆盖整棵树. 那么设f[i]为覆盖i子树的方案数.转移时考虑包含根的路径.注意到 ...

  4. Luogu2540 斗地主增强版(搜索+动态规划)

    单纯的暴搜似乎还是很好写的,然而过不了.出完顺子之后答案是可以dp出来的,于是大力搜然后大力dp就好了. dp时强行讨论完了几乎所有拆牌情况,理性愉悦一发. #include<iostream& ...

  5. 算法训练 Bus Tour

    问题描述 想象你是一个在Warsaw的游客,而且预订了一次乘车旅行,去城镇外看一些令人惊异的景点.这辆公共汽车首先围绕城镇行驶一段时间(一段很长的时间,由于Warsaw是一个大城市),把在各自旅馆的人 ...

  6. BZOJ3998:[TJOI2015]弦论——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3998 https://www.luogu.org/problemnew/show/P3975 对于 ...

  7. HDOJ(HDU).1284 钱币兑换问题 (DP 完全背包)

    HDOJ(HDU).1284 钱币兑换问题 (DP 完全背包) 题意分析 裸的完全背包问题 代码总览 #include <iostream> #include <cstdio> ...

  8. oracle数据库解锁

    当我们修改数据库时用for update 或者使用rowId修改后,对表进行了锁定,由于某种原因没有对他进行关闭,我们需要关闭 select b.username,b.sid,b.serial#,lo ...

  9. 自动清理N天前的二进制日志

    这里以自动清理5天前的二进制日志为例(做了同步或依赖于二进制日志备份的请慎用): 以root身份登录数据库,执行以下命令: ; 首次设置expire_logs_days参数后需要执行flush log ...

  10. JNA的用法

    JNA(Java Native Access):建立在JNI之上的Java开源框架,SUN主导开发,用来调用C.C++代码,尤其是底层库文件(windows中叫dll文件,linux下是so[shar ...