gpt4 book ai didi

Python3 加密(hashlib和hmac)模块的实现

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python3 加密(hashlib和hmac)模块的实现由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

以下代码以Python3.6.1为例 。

  1. hashlib : 不可逆加密
  2. hmac : 不可逆键值对方式加密

hashlib模块简介:

hashlib模块为不同的安全哈希/安全散列(Secure Hash Algorithm)和 信息摘要算法(Message Digest Algorithm)实现了一个公共的、通用的接口,也可以说是一个统一的入口。因为hashlib模块不仅仅是整合了md5和sha模块的功能,还提供了对更多中算法的函数实现,如:MD5,SHA1,SHA224,SHA256,SHA384和SHA512.

hashlib模块使用步骤:

1)获取一个哈希算法对应的哈希对象(比如名称为hash): 可以通过 hashlib.new(哈希算法名称, 初始出入信息)函数,来获取这个哈希对象,如hashlib.new('MD5', 'Hello'),hashlib.new('SHA1', 'Hello')等;也可以通过hashlib.哈希算法名称()来获取这个哈希对象,如hashlib.md5(), hashlib.sha1()等.

2)设置/追加输入信息: 调用已得到哈希对象的update(输入信息)方法可以设置或追加输入信息,多次调用该方法,等价于把每次传递的参数凭借后进行作为一个参数垫底给update()方法。也就是说,多次调用是累加,而不是覆盖.

3)获取输入信息对应的摘要: 调用已得到的哈希对象的digest()方法或hexdigest()方法即可得到传递给update()方法的字符串参数的摘要信息。digest()方法返回的摘要信息是一个二进制格式的字符串,其中可能包含非ASCII字符,包括NUL字节,该字符串长度可以通过哈希对象的digest_size属性获取;而hexdigest()方法返回的摘要信息是一个16进制格式的字符串,该字符串中只包含16进制的数字,且长度是digest()返回结果长度的2倍,这可用邮件的安全交互或其它非二进制的环境中.

?
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/19'
# hash_demo.py Hash加密相关(安全哈希)
# 支持: MD5, SHA1 SHA224 SHA256 SHA384 SHA512
 
 
import hashlib
 
 
def hash_demo():
   m = hashlib.md5()
   m.update(b "hello" )
   m.update(b "world!" ) # = hello + world!
 
   hash_hex = hashlib.sha3_512(b "luzhuo.me" ).hexdigest()
 
   print (m.digest_size)
   print (m.digest()) # 二进制hash
   print (m.hexdigest()) # 十六进制hash
   print (hash_hex)
 
   # 加盐加密
   hash_bytes = hashlib.pbkdf2_hmac( 'sha256' , b 'luzhuo.me' , b '80' , 100000 )
   print (hash_bytes)
 
 
 
def hash_func():
   # hashlib.new(name[, data]) // 创建hashlib(非首选), name=算法名, data:数据
   hash = hashlib.new( 'ripemd160' , b 'luzhuo.me' )
 
   # 常量
   dics = hashlib.algorithms_guaranteed # 所有平台支持的hash算法的名称
   dics = hashlib.algorithms_available # 在Python解析器中可用的hash算法的名称, 传递给new()时, 可识别
 
   # hashlib.pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None) // 加盐加密 hash_name:hash名称, password:数据, salt:盐, iterations:循环次数, dklen:密钥长度
   hash_bytes = hashlib.pbkdf2_hmac( 'sha256' , b 'luzhuo.me' , b '80' , 100000 )
 
   # hash对象
   num = hash .digest_size # hash结果的大小
   num = hash .block_size # hash算法的内部块的大小
   strs = hash .name # hash名称, 可传给new()使用
   hash .update(b "data" ) # 字节缓冲区 hash.update(a) hash.update(b) == hash.update(a+b)
   hash_bytes = hash .digest() # 字节hash
   hash_str = hash .hexdigest() # 16进制字符串hash
   hash = hash .copy() # 拷贝hash对象副本
 
 
 
if __name__ = = "__main__" :
   hash_demo()
 
   # hash_func()

hashmac模块简介:

前面说过,HMAC算法也是一种一种单项加密算法,并且它是基于上面各种哈希算法/散列算法的,只是它可以在运算过程中使用一个密钥来增增强安全性。hmac模块实现了HAMC算法,提供了相应的函数和方法,且与hashlib提供的api基本一致.

hmac模块使用步骤:

hmac模块模块的使用步骤与hashlib模块的使用步骤基本一致,只是在第1步获取hmac对象时,只能使用hmac.new()函数,因为hmac模块没有提供与具体哈希算法对应的函数来获取hmac对象.

?
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/19'
# hmac_demo.py HMAC算法
# 与hashlib不同之处在于多了key
 
import hmac
 
 
def hmac_demo():
   # 加密
   h = hmac.new(b "net" )
   h.update(b "luzhuo.me" )
   h_str = h.hexdigest()
   print (h_str)
 
   # 比较密码
   boolean = hmac.compare_digest(h_str, hmac.new(b "net" , b "luzhuo.me" ).hexdigest())
   print (boolean)
 
 
 
def hmac_func():
   # 创建key和内容,再都进行加密
   # hmac.new(key, msg=None, digestmod=None) // 创建新的hmac对象, key:键, msg:update(msg), digestmod:hash名称(同hashlib.new())(默认md5)
   hc = hmac.new(b "key" )
 
   # hmac对象
   hc.update(b "msg" ) # 字节缓冲区 hc.update(a) hc.update(b) == hc.update(a+b)
   hash_bytes = hc.digest() # 字节hash
   hash_str = hc.hexdigest() # 16进制hash字符串
   hc = hc.copy() # 拷贝hmac副本
   num = hc.digest_size # hash大小
   num = hc.block_size # hash算法内部块大小
   strs = hc.name # hash名称
   # hmac.compare_digest(a, b) // 比较两个hash密钥是否相同, 参数可为: str / bytes-like object, (注:建议使用,不建议使用a==b)
   boolean = hmac.compare_digest(hmac.new(b "net" , b "luzhuo.me" ).digest(), hmac.new(b "net" , b "luzhuo.me" ).digest())
 
 
 
 
if __name__ = = "__main__" :
   hmac_demo()
 
   # hmac_func()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:http://blog.csdn.net/rozol/article/details/72566661 。

最后此篇关于Python3 加密(hashlib和hmac)模块的实现的文章就讲到这里了,如果你想了解更多关于Python3 加密(hashlib和hmac)模块的实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com