Python常用模块-摘要算法(hashlib)

                    Python常用模块-摘要算法(hashlib)

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.MD5算法参数详解

1.十六进制md5算法摘要

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
 5 #EMAIL:[email protected]
 6 import hashlib
 7 m = hashlib.md5()
 8 m.update(b"hello")                              #字节格式输入
 9 print(m.hexdigest())                             #用十六进制输出一段md5值,注意,只要输入的值不变,这个值就不会变的!
10 m.update(b"my name is yinzhengjie")
11 print(m.hexdigest())
12
13
14 m2 = hashlib.md5()
15 m2.update(b"hello  my name is yinzhengjie") #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
16 print(m2.hexdigest())
17
18 ‘‘‘
19 扩展:
20     MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
21 ‘‘‘
22
23
24
25 #以上代码执行结果如下:
26 5d41402abc4b2a76b9719d911017c592
27 1c7bdaafeb36ea7e3236d01afeee39cf
28 1d19d8f2d5037b0f3e9a2d020930ba91

2.二进制md5算法摘要

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
 5 #EMAIL:[email protected]
 6 import hashlib
 7 m = hashlib.md5()
 8 m.update(b"hello")                         #字节格式输入
 9 print(m.digest())                           #返回摘要,作为二进制数据字符串值。
10 m.update(b"my name is yinzhengjie")
11 print(m.digest())
12
13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
14 m2 = hashlib.md5()
15 m2.update(b"hello  my name is yinzhengjie")
16 print(m2.digest())
17
18 ‘‘‘
19 扩展:
20     MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
21 ‘‘‘
22
23
24
25 #以上代码执行结果如下:
26 b‘][email protected]*\xbcK*v\xb9q\x9d\x91\x10\x17\xc5\x92‘
27 b‘\x1c{\xda\xaf\xeb6\xea~26\xd0\x1a\xfe\xee9\xcf‘
28 b‘\x1d\x19\xd8\xf2\xd5\x03{\x0f>\x9a-\x02\t0\xba\x91‘

二.sha1算法参数详解

  Google已经将改算法破解了,只是还没有公布,目前很少人用这种算法了!

1.二进制sha1算法摘要

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
 5 #EMAIL:[email protected]
 6 import hashlib
 7 m = hashlib.sha1()
 8 m.update(b"hello")                         #字节格式输入
 9 print(m.digest())                           #返回摘要,作为二进制数据字符串值。
10 m.update(b"my name is yinzhengjie")
11 print(m.digest())
12
13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
14 m2 = hashlib.md5()
15 m2.update(b"hello  my name is yinzhengjie")
16 print(m2.digest())
17
18 ‘‘‘
19 扩展:
20     MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
21 ‘‘‘
22
23
24
25 #以上代码执行结果如下:
26 b‘\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe\xde\x0f;H,\xd9\xae\xa9CM‘
27 b‘p\xff\xe5<\x08\xb9D?\xabJ\xcdC2f\x84\xa07\xd6\xc2c‘
28 b‘\x1d\x19\xd8\xf2\xd5\x03{\x0f>\x9a-\x02\t0\xba\x91‘

2.十六进制sha1算法摘要

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
 5 #EMAIL:[email protected]
 6 import hashlib
 7 m = hashlib.sha1()
 8 m.update(b"hello") #字节格式输入
 9 print(m.hexdigest()) #用十六进制输出一段md5值,注意,只要输入的值不变,这个值就不会变的!
10 m.update(b"my name is yinzhengjie")
11 print(m.hexdigest())
12
13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
14 m2 = hashlib.sha1()
15 m2.update(b"hello  my name is yinzhengjie")
16 print(m2.hexdigest())
17
18 ‘‘‘
19 扩展:
20     MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
21 ‘‘‘
22
23
24 #以上代码执行结果如下:
25 aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
26 70ffe53c08b9443fab4acd43326684a037d6c263
27 ad068b91291c2099822a36445eb24441125f33a6

三.sha256算法参数详解

  这个是没有被破解的,连谷歌破解的仅仅是sha1,而256加密后的明显字节变长了呀,有木有。

1.二进制sha512算法摘要

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
 5 #EMAIL:[email protected]
 6 import hashlib
 7 m = hashlib.sha256()
 8 m.update(b"hello")                         #字节格式输入
 9 print(m.digest())                           #返回摘要,作为二进制数据字符串值。
10 m.update(b"my name is yinzhengjie")
11 print(m.digest())
12
13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
14 m2 = hashlib.md5()
15 m2.update(b"hello  my name is yinzhengjie")
16 print(m2.digest())
17
18 ‘‘‘
19 扩展:
20     MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
21 ‘‘‘
22
23
24
25 #以上代码执行结果如下:
26 b‘,\xf2M\xba_\xb0\xa3\x0e&\xe8;*\xc5\xb9\xe2\x9e\x1b\x16\x1e\\\x1f\xa7B^s\x043b\x93\x8b\x98$‘
27 b‘\xec\xf6\x8e\x01\x17\xac!:\xb9<\xe4\xab\xee\x13\x03\xcc\xe4r\xb0\xdc\xfb\xcbm\xd4\xec\xa2\xc9P\x02\xfdi\xb7‘
28 b‘\x1d\x19\xd8\xf2\xd5\x03{\x0f>\x9a-\x02\t0\xba\x91‘

2.十六进制sha512算法摘要

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
 5 #EMAIL:[email protected]
 6 import hashlib
 7 m = hashlib.sha256()
 8 m.update(b"hello") #字节格式输入
 9 print(m.hexdigest()) #用十六进制输出一段md5值,注意,只要输入的值不变,这个值就不会变的!
10 m.update(b"my name is yinzhengjie")
11 print(m.hexdigest())
12
13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
14 m2 = hashlib.sha256()
15 m2.update(b"hello  my name is yinzhengjie")
16 print(m2.hexdigest())
17
18
19 #以上代码执行结果如下:
20 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
21 ecf68e0117ac213ab93ce4abee1303cce472b0dcfbcb6dd4eca2c95002fd69b7
22 f49de76fe30141f238d0c16234a0bf0188bf9a34b4e8ddb65c508c26d5b1af06

四.sha512算法参数详解

  这个也没有被破解,明显的效果就是加密后的值变的比256还要长呢!

1.二进制sha512算法摘要

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
 5 #EMAIL:[email protected]
 6 import hashlib
 7 m = hashlib.sha512()
 8 m.update(b"hello")                         #字节格式输入
 9 print(m.digest())                           #返回摘要,作为二进制数据字符串值。
10 m.update(b"my name is yinzhengjie")
11 print(m.digest())
12
13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
14 m2 = hashlib.md5()
15 m2.update(b"hello  my name is yinzhengjie")
16 print(m2.digest())
17
18 ‘‘‘
19 扩展:
20     MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
21 ‘‘‘
22
23
24
25 #以上代码执行结果如下:
26 b‘\x9bq\xd2$\xbdb\xf3x]\x96\xd4j\xd3\xea=s1\x9b\xfb\xc2\x89\x0c\xaa\xda\xe2\xdf\xf7%\x19g<\xa7##\xc3\xd9\x9b\xa5\xc1\x1d|z\xccn\x14\xb8\xc5\xda\x0cFcG\\.\\:\xde\xf4os\xbc\xde\xc0C‘
27 b"7\x8fb\xe6‘\x11\xcc\xa8I\x9b\x89=\xcf\xac\x06\xdc\xbc\xb7GyG\x96\xd9=\xfc\xa7r\xc6\xba\x9ep\x96\xd7X\x05\x82\xbd\x87\xae\x94\x90UD\xdd\xdf\x94-\xa5\xcd\xf9o\x89\xdc\xcf\x85pr\x9ekvE\x12\xcc\x0f"
28 b‘\x1d\x19\xd8\xf2\xd5\x03{\x0f>\x9a-\x02\t0\xba\x91‘

2.十六进制sha512算法摘要

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
 5 #EMAIL:[email protected]
 6 import hashlib
 7 m = hashlib.sha512()
 8 m.update(b"hello") #字节格式输入
 9 print(m.hexdigest()) #用十六进制输出一段md5值,注意,只要输入的值不变,这个值就不会变的!
10 m.update(b"my name is yinzhengjie")
11 print(m.hexdigest())
12
13 #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
14 m2 = hashlib.sha512()
15 m2.update(b"hello  my name is yinzhengjie")
16 print(m2.hexdigest())
17
18
19 #以上代码执行结果如下:
20 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
21 378f62e62711cca8499b893dcfac06dcbcb747794796d93dfca772c6ba9e7096d7580582bd87ae94905544dddf942da5cdf96f89dccf8570729e6b764512cc0f
22 ea1bdace33723e839894d77f70ad7d8477b36fd2f45a4d42b6b9637c745da5f75d2ab276f130a82619ebc7e53b9d30926f9ba89176c503d4825ab33bea5b0168

五.hmac模块

  如果你觉得以上的加密方法还是不够安全~厉害了,你的安全感可真低啊,看来是伤的不轻,一定是一个有故事的人,不过针对你这种人呢~还有一种算法为你特别定制hmac,等你成为了一个开发大神,你可以自己写一个算法,因为你毕竟只相信你自己嘛,哈哈~

  散列消息鉴别码,简称HMAC,是一种基于消息鉴别码MAC(Message Authentication Code)的鉴别机制。使用HMAC时,消息通讯的双方,通过验证消息中加入的鉴别密钥K来鉴别消息的真伪;一般用于网络通信中消息加密,前提是双方先要约定好key,就像接头暗号一样,然后消息发送把用key把消息加密,接收方用key + 消息明文再加密,拿加密后的值 跟 发送者的相对比是否相等,这样就能验证消息的真实性以及发送者的合法性了。(它内部对我们创建 key 和 内容 再进行处理然后再加密)

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
 5 #EMAIL:[email protected]
 6 import hmac
 7 h = hmac.new("我本有心向明月".encode("utf-8"), "奈何明月照沟渠".encode("utf-8"),) #"我本有心向明月"这就好比双方(A,B)已经约定好了的key,(类似于我们第一次登录linux服务器,使用ssh登陆方式都会提示你,让你输入"yes"后才能输入密码。),接受者(A)接收到了"奈何明月照沟渠"这个明文消息和加密后的字符“489f9932949514ab24894559150088c0”,然后用定义好的key和去加密"奈何明月照沟渠"这个明文字符,如果加密后生成的字符是“489f9932949514ab24894559150088c0”就证明这个消息是发送者(B)发送过来的数据,它只能验证消息的合法来源。如果中间人截获了明文消息加以修改的,就会被发现!
 8 print(h.hexdigest())
 9
10
11 #以上代码执行结果如下:
12 489f9932949514ab24894559150088c0

原文地址:https://www.cnblogs.com/yinzhengjie/p/8512015.html

时间: 2024-10-09 15:48:16

Python常用模块-摘要算法(hashlib)的相关文章

Python常用模块之hashlib

Python里面的hashlib模块提供了很多加密的算法,这里介绍一下hashlib的简单使用事例,用hashlib的md5算法加密数据 import hashlib hash = hashlib.md5()#md5对象,md5不能反解,但是加密是固定的,就是关系是一一对应,所以有缺陷,可以被对撞出来 hash.update(bytes('admin',encoding='utf-8'))#要对哪个字符串进行加密,就放这里 print(hash.hexdigest())#拿到加密字符串 # ha

python 常用模块 time random os模块 sys模块 json &amp; pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess logging re正则 转自老男孩老师Yuan:http://www.cnblogs.com/yuanchenqi/articles/5732581.html 模块&包(* * * * *) 模块(modue)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,

Python常用模块——hashlib加密

Python常用模块--hashlib加密 一.HASH Hash,一般翻译为"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列程相同的输出,而不可能从散列值来唯一的确定输入值. 简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数. HASH主要用于信息安全领域中加密算

python——常用模块

time.asctime(time.localtime(1234324422)) python--常用模块 1 什么是模块: 模块就是py文件 2 import time #导入时间模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: (1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"type(time.time())",返回的是float类型.

Python常用模块大全

Python常用模块大全 os模块: os.remove() 删除文件 os.unlink() 删除文件 os.rename() 重命名文件 os.listdir() 列出指定目录下所有文件 os.chdir() 改变当前工作目录 os.getcwd() 获取当前文件路径 os.mkdir() 新建目录 os.rmdir() 删除空目录(删除非空目录, 使用shutil.rmtree()) os.makedirs() 创建多级目录 os.removedirs() 删除多级目录 os.stat(f

实战篇一 python常用模块和库介绍

# [email protected] coding: utf-8 [email protected] -- Python 常用模块和库介绍 第一部分:json模块介绍 import json 将一个Python数据结构转换为JSON: dict_ = {1:2, 3:4, "55":"66"} # test json.dumps print type(dict_), dict_ json_str = json.dumps(dict_) print "js

python——常用模块2

python--常用模块2 1 logging模块 1.1 函数式简单配置 import logging logging.debug("debug message") logging.info("info message") logging.warning("warning message") logging.error("error message") logging.critical('critical message')

Python常用模块-随机数模块(random)

Python常用模块-随机数模块(random) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用方法举例 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7

python常用模块之time&amp;datetime模块

python常用模块之time&datetime模块 在平常的代码中,我们经常要与时间打交道.在python中,与时间处理有关的模块就包括:time和datetime,下面分别来介绍: 在开始之前,首先要说明有以下几种方式来表示时间: 1.时间戳 2.格式化的时间字符串(时间对象) 3.元组(struct_time)共九个元素,由于python的time模块实现主要调用C库,所以各个平台可能不同 几个定义 UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文