Python常用模块-摘要算法(hashlib)
Python常用模块-常见的加密算法模块使用
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.MD5算法参数详解(不安全,已被破解)
1.十六进制md5算法摘要
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#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/
#EMAIL:y1053419035@qq.com
import hashlib
m = hashlib.md5()
m.update(b"hello") #字节格式输入
print(m.hexdigest()) #用十六进制输出一段md5值,注意,只要输入的值不变,这个值就不会变的!
m.update(b"my name is yinzhengjie")
print(m.hexdigest()) m2 = hashlib.md5()
m2.update(b"hello my name is yinzhengjie") #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
print(m2.hexdigest()) '''
扩展:
MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
''' #以上代码执行结果如下:
5d41402abc4b2a76b9719d911017c592
1c7bdaafeb36ea7e3236d01afeee39cf
1d19d8f2d5037b0f3e9a2d020930ba91
2.二进制md5算法摘要
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#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/
#EMAIL:y1053419035@qq.com
import hashlib
m = hashlib.md5()
m.update(b"hello") #字节格式输入
print(m.digest()) #返回摘要,作为二进制数据字符串值。
m.update(b"my name is yinzhengjie")
print(m.digest()) #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
m2 = hashlib.md5()
m2.update(b"hello my name is yinzhengjie")
print(m2.digest()) '''
扩展:
MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
''' #以上代码执行结果如下:
b']A@*\xbcK*v\xb9q\x9d\x91\x10\x17\xc5\x92'
b'\x1c{\xda\xaf\xeb6\xea~26\xd0\x1a\xfe\xee9\xcf'
b'\x1d\x19\xd8\xf2\xd5\x03{\x0f>\x9a-\x02\t0\xba\x91'
二.sha1算法参数详解(不安全,已被破解)
Google已经将改算法破解了,只是还没有公布,目前很少人用这种算法了!我国王晓云教授也声称破解了该加密方式,除此之外她还破解了md5哟。
1.二进制sha1算法摘要
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#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/
#EMAIL:y1053419035@qq.com
import hashlib
m = hashlib.sha1()
m.update(b"hello") #字节格式输入
print(m.digest()) #返回摘要,作为二进制数据字符串值。
m.update(b"my name is yinzhengjie")
print(m.digest()) #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
m2 = hashlib.md5()
m2.update(b"hello my name is yinzhengjie")
print(m2.digest()) '''
扩展:
MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
''' #以上代码执行结果如下:
b'\xaa\xf4\xc6\x1d\xdc\xc5\xe8\xa2\xda\xbe\xde\x0f;H,\xd9\xae\xa9CM'
b'p\xff\xe5<\x08\xb9D?\xabJ\xcdC2f\x84\xa07\xd6\xc2c'
b'\x1d\x19\xd8\xf2\xd5\x03{\x0f>\x9a-\x02\t0\xba\x91'
2.十六进制sha1算法摘要
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#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/
#EMAIL:y1053419035@qq.com
import hashlib
m = hashlib.sha1()
m.update(b"hello") #字节格式输入
print(m.hexdigest()) #用十六进制输出一段md5值,注意,只要输入的值不变,这个值就不会变的!
m.update(b"my name is yinzhengjie")
print(m.hexdigest()) #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
m2 = hashlib.sha1()
m2.update(b"hello my name is yinzhengjie")
print(m2.hexdigest()) '''
扩展:
MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
''' #以上代码执行结果如下:
aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
70ffe53c08b9443fab4acd43326684a037d6c263
ad068b91291c2099822a36445eb24441125f33a6
三.sha256算法参数详解
这个是没有被破解的,连谷歌破解的仅仅是sha1,而256加密后的明显字节变长了呀,有木有。
1.二进制sha512算法摘要
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#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/
#EMAIL:y1053419035@qq.com
import hashlib
m = hashlib.sha256()
m.update(b"hello") #字节格式输入
print(m.digest()) #返回摘要,作为二进制数据字符串值。
m.update(b"my name is yinzhengjie")
print(m.digest()) #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
m2 = hashlib.md5()
m2.update(b"hello my name is yinzhengjie")
print(m2.digest()) '''
扩展:
MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
''' #以上代码执行结果如下:
b',\xf2M\xba_\xb0\xa3\x0e&\xe8;*\xc5\xb9\xe2\x9e\x1b\x16\x1e\\\x1f\xa7B^s\x043b\x93\x8b\x98$'
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'
b'\x1d\x19\xd8\xf2\xd5\x03{\x0f>\x9a-\x02\t0\xba\x91'
2.十六进制sha512算法摘要
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#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/
#EMAIL:y1053419035@qq.com
import hashlib
m = hashlib.sha256()
m.update(b"hello") #字节格式输入
print(m.hexdigest()) #用十六进制输出一段md5值,注意,只要输入的值不变,这个值就不会变的!
m.update(b"my name is yinzhengjie")
print(m.hexdigest()) #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
m2 = hashlib.sha256()
m2.update(b"hello my name is yinzhengjie")
print(m2.hexdigest()) #以上代码执行结果如下:
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
ecf68e0117ac213ab93ce4abee1303cce472b0dcfbcb6dd4eca2c95002fd69b7
f49de76fe30141f238d0c16234a0bf0188bf9a34b4e8ddb65c508c26d5b1af06
四.sha512算法参数详解
这个也没有被破解,明显的效果就是加密后的值变的比256还要长呢!
1.二进制sha512算法摘要
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#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/
#EMAIL:y1053419035@qq.com
import hashlib
m = hashlib.sha512()
m.update(b"hello") #字节格式输入
print(m.digest()) #返回摘要,作为二进制数据字符串值。
m.update(b"my name is yinzhengjie")
print(m.digest()) #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
m2 = hashlib.md5()
m2.update(b"hello my name is yinzhengjie")
print(m2.digest()) '''
扩展:
MD5值是无法被反解的,网上有人说能破解是骗人的,之所以能破解,是因为他们已经将算好的md5值存入到数据库中,然后跟你你输入的MD5值给你返回一个明文的字符串。
''' #以上代码执行结果如下:
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'
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"
b'\x1d\x19\xd8\xf2\xd5\x03{\x0f>\x9a-\x02\t0\xba\x91'
2.十六进制sha512算法摘要
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#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/
#EMAIL:y1053419035@qq.com
import hashlib
m = hashlib.sha512()
m.update(b"hello") #字节格式输入
print(m.hexdigest()) #用十六进制输出一段md5值,注意,只要输入的值不变,这个值就不会变的!
m.update(b"my name is yinzhengjie")
print(m.hexdigest()) #注意,将上面两个字段拼接起来,其中的MD5值也是会发生变化的
m2 = hashlib.sha512()
m2.update(b"hello my name is yinzhengjie")
print(m2.hexdigest()) #以上代码执行结果如下:
9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
378f62e62711cca8499b893dcfac06dcbcb747794796d93dfca772c6ba9e7096d7580582bd87ae94905544dddf942da5cdf96f89dccf8570729e6b764512cc0f
ea1bdace33723e839894d77f70ad7d8477b36fd2f45a4d42b6b9637c745da5f75d2ab276f130a82619ebc7e53b9d30926f9ba89176c503d4825ab33bea5b0168
五.hmac模块
如果你觉得以上的加密方法还是不够安全~厉害了,你的安全感可真低啊,看来是伤的不轻,一定是一个有故事的人,不过针对你这种人呢~还有一种算法为你特别定制hmac,等你成为了一个开发大神,你可以自己写一个算法,因为你毕竟只相信你自己嘛,哈哈~
散列消息鉴别码,简称HMAC,是一种基于消息鉴别码MAC(Message Authentication Code)的鉴别机制。使用HMAC时,消息通讯的双方,通过验证消息中加入的鉴别密钥K来鉴别消息的真伪;一般用于网络通信中消息加密,前提是双方先要约定好key,就像接头暗号一样,然后消息发送把用key把消息加密,接收方用key + 消息明文再加密,拿加密后的值 跟 发送者的相对比是否相等,这样就能验证消息的真实性以及发送者的合法性了。(它内部对我们创建 key 和 内容 再进行处理然后再加密)
#!/usr/bin/env python
#_*_coding:utf-8_*_
#@author :yinzhengjie
#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/
#EMAIL:y1053419035@qq.com
import hmac
h = hmac.new("我本有心向明月".encode("utf-8"), "奈何明月照沟渠".encode("utf-8"),) #"我本有心向明月"这就好比双方(A,B)已经约定好了的key,(类似于我们第一次登录linux服务器,使用ssh登陆方式都会提示你,让你输入"yes"后才能输入密码。),接受者(A)接收到了"奈何明月照沟渠"这个明文消息和加密后的字符“489f9932949514ab24894559150088c0”,然后用定义好的key和去加密"奈何明月照沟渠"这个明文字符,如果加密后生成的字符是“489f9932949514ab24894559150088c0”就证明这个消息是发送者(B)发送过来的数据,它只能验证消息的合法来源。如果中间人截获了明文消息加以修改的,就会被发现!
print(h.hexdigest()) #以上代码执行结果如下:
489f9932949514ab24894559150088c0
Python常用模块-摘要算法(hashlib)的更多相关文章
- Python常用模块之hashlib(加密)
Python常用模块之hashlib(加密) Python里面的hashlib模块提供了很多加密的算法,这里介绍一下hashlib的简单使用事例,用hashlib的md5算法加密数据import ha ...
- Python常用模块之hashlib模块
1.hashilib模块的功能 python的hashlib提供了常见的摘要算法,如MD5, SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换成一 ...
- python常用模块补充hashlib configparser logging,subprocess模块
一.hashlib模板 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定 ...
- Python常用模块之hashlib
Python里面的hashlib模块提供了很多加密的算法,这里介绍一下hashlib的简单使用事例,用hashlib的md5算法加密数据 import hashlib hash = hashlib.m ...
- python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则
python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess ...
- python——常用模块
python--常用模块 1 什么是模块: 模块就是py文件 2 import time #导入时间模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的 ...
- python常用模块及面向对象(一)
目录: 常用模块之time模块 常用模块之random模块 常用模块之os模块 常用模块之sys模块 常用模块之subprocess模块 常用模块之json模块 常用模块之pickle模块 常用模块之 ...
- 常用模块之hashlib,configparser,logging模块
常用模块二 hashlib模块 hashlib提供了常见的摘要算法,如md5和sha1等等. 那么什么是摘要算法呢?摘要算法又称为哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定 ...
- Python常用模块——目录
Python常用模块学习 Python模块和包 Python常用模块time & datetime &random 模块 Python常用模块os & sys & sh ...
随机推荐
- SSIS 遍历目录,把文件内容导入数据库
最近接手一个项目,程序的基本框架是:程序A导出数据,以.tsv格式存储,数据列之间以tab间隔:程序B吃文档,把数据导入到数据库中,并把处理过的文档备份/移动到指定的目录中.为了快速开发,程序B设计成 ...
- SpringBoot中使用Quartz笔记
Quartz可以用来做什么? Quartz是一个任务调度框架,可用来做定时任务. 吧啦吧啦......... 还是直接上代码. application.properties 配置文件. * * ? ...
- 调用wx.request接口时需要注意的几个问题
写在前面 之前写了一篇<微信小程序实现各种特效实例>,上次的小程序的项目我负责大部分前端后台接口的对接,然后学长帮我改了一些问题.总的来说,收获了不少吧! 现在项目已经完成,还是要陆陆续续 ...
- WebService技术,服务端发布到Tomcat(使用Servlet发布),客户端使用axis2实现(二)
还是在WebService技术,服务端and客户端JDK-wsimport工具(一)的基础上实现.新建一个包:com.aixs2client.目录结构如下: 一.服务端: 1.还是使用com.webs ...
- 关于python内存地址问题
遇到一个朋友,给我提了一个问题:python中的两个相同的值,内存地址是否一样? 当时印象里有这样一句话:Python采用基于值的内存管理模式,相同的值在内存中只有一份 于是张嘴就说是一样的 朋友说不 ...
- React Native 'config.h' file not found 问题、 'glog/logging.h' file not found 问题、configure: error: C compiler cannot create executables问题解决过程记录
1.在github 上面 git clone 一个RN 项目代码,npm install (yarn)后,准备运行iOS工程,发现'config.h' file not found ,恶心!!! 百度 ...
- Docker打DB2 9.7镜像采坑相关
概况:以centos:7.2.1511镜像为基础镜像,使用docker commit方式进行构建 步骤: 运行centos7.2.1511镜像(以特权模式运行,后续内核参数修改必需参数) dock ...
- delphi XE的字符串处理
最近用delphi xe做了个东西,因为以前一直使用Delphi 7做开发,delphi 7 到delphi XE有了很大的变化,最大的变化就是对Unicode的支持,所以刚开始使用DELPHI XE ...
- mysql 清空数据
清空数据有2 个命令 -- 清空全部数据,不写日志,不可恢复,速度极快 truncate table 表名; -- 清空全部数据,写日志,数据可恢复,速度慢 delete from 表名 业务需求:清 ...
- ThreadLocal 与 Synchronized区别
相同:ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题.不同:Synchronized同步机制采用了“以时间换空间”的方式,仅提供一份变量,让不同的线程排队访问:而Thr ...