Python加密模块的hashlib,hmac模块使用解析


Posted in Python onJanuary 02, 2020

这篇文章主要介绍了Python加密模块的hashlib,hmac模块使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

在写搬砖脚本中,碰到一个加密的信号标签文件无法运行。

import hashlib
import time
 
m = hashlib.md5()
 
api_key = ''
api_secret = ''
 
params = {'api_key':api_key, 'time':int(time.time()), 'symbol':'btclcny'}
 
def sign( data , secret ):
  signStr = ""
  keys = data.keys()
  keys = sorted(keys)
  for key in keys:
    signStr = signStr + key
    signStr = signStr + bytes(data[key])
    pass
  signStr += secret
  m.update(signStr)
  return m.hexdigest()
 
print sign( params , api_secret )

实在搞不懂写的人的意思,里面有字符串与字节码的相加?反正就是跑不起来,随便我这个加密模块也用的少,这次就给自己记录学习的机会来了。

妈的,这个平台太垃圾了,接口有问题的,浪费我好长时间,后面还去看了它的PHP代码,看的脑子发麻,后来仔细研究了传入 params,里面的接口文档写的乱七八糟,浪费时间。一万头草泥马飞过。

切入主题,先讲hashlib,后面介绍hmac,有时间下一个章节,把base64还有io,以及pickle,json,shelve,fileinput.

概念:

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。所以看来的hash加密值没有超过字母f的

后面可以测试每种加密手法的输出字段长度,也可以知道具体输出的Byte字节数(一个16进制的数对应4位)。

'''初始化对象'''
h1 = hashlib.md5()
h2 = hashlib.new('md5')
h3 = hashlib.md5()
h1.update(b'123')  # 进行摘要
h2.update('123'.encode())
h3.update(b'1')
h3.update(b'23')
print(h1.hexdigest())  # 取值
print(h2.hexdigest())
print(h3.hexdigest())
202cb962ac59075b964b07152d234b70<br data-filtered="filtered">202cb962ac59075b964b07152d234b70<br data-filtered="filtered">202cb962ac59075b964b07152d234b70

一共有两种实例化的方法,一般介绍都是第一种。记住,进行进行md5摘要时,对象一定是二进制数据。

update其实可以分开用,只要里面的数据没有变,分开用书上介绍对大文件操作会更加快。

由于这样直接加密,没有添加辅助字符,假如是用户的密码设置的很简单,很容易通过加密后的数据也能反向分析出密码,所以要添加一些干扰词汇。

hmac也是干扰加密的另外一种相对看过去比较高级的写法。

add_word = b'haha'     # 把这个当做加密盐,
 
hh1 = hashlib.md5()
hh1.update(add_word + b'jiujiu')
print(hh1.hexdigest())
 
hh2 = hashlib.md5()
hh2.update( b'jiujiu' + add_word)
print(hh2.hexdigest())
 
m = hmac.new(add_word) # 这个跟hashlib的写法有点类似,默认是md5加密
m.update(b'jiujiu')
print(m.hexdigest())
h_md5 = hmac.new(add_word, b'jiujiu').hexdigest() # 这是另外一种方式,直接加密后取值。
h_sha1 = hmac.new(add_word, b'jiujiu', 'sha1').hexdigest()
h_sha224 = hmac.new(add_word, b'jiujiu', 'sha224').hexdigest()
h_sha256 = hmac.new(add_word, b'jiujiu', 'sha256').hexdigest()
h_sha512 = hmac.new(add_word, b'jiujiu', 'sha512').hexdigest()
 
print(h_md5, len(h_md5), sep='======>num')
print(h_sha1, len(h_sha1), sep='======>num')  # 通过输出可以看出,md5输出32个16进制数字,一共128位
print(h_sha224, len(h_sha224), sep='======>num')  # sha1输出40个数字,所以为160位,剩下的sha后面的数字就代表输出几位。
print(h_sha256, len(h_sha256), sep='======>num')
print(h_sha512, len(h_sha512), sep='======>num')
3e289c523f955430bce2e47a14d4934b
eb01e09a1fe2bfd95d8f31c8ae544faf
ef84bc9ee2bf91d1789227d82193d7a9
ef84bc9ee2bf91d1789227d82193d7a9======>num32
fbd95ddafdac6352cdf3d9d4e8c6d2421c80e56c======>num40
60d1896d00e73bc67469a58b39ded91c60c162eda0f44306f7d08d58======>num56
b36f8977bba6265612bc338b89c698d17cff7ccfb81b7d7a434f0ad889995e26======>num64
043f51bd410f9d328ca0ab0913ddfde9c2519f639c74447a1516811b8920b125aa6f4d3977c83e038e82c39103ac2a3bbdd5235c9c95fc030a267cdf0d578696======>num128

从整个代码的操作来看还是比较简单,至少比我想象的简单,加密的逻辑我也不懂,我也知道密码学很高级,就我这小学三年级的数学有空再看吧。

hmac只不过是一种机器加密的手段,但我试过了,无论我把这个加密盐放加密字节码的前面或者后面,跟hmac出来的效果不一样,看来它有自己的拼接加密算法。

至于sha1,sha256,sha512就比较容易记住了,md5是32个16进制数输出,所以包含bit是128位,sha1是是输出40个16进制数,所以是160个bit,剩下的比较好理解,后面的数字代表了几个bit位。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
新手该如何学python怎么学好python?
Oct 07 Python
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
Jul 11 Python
在Python的Flask框架中实现单元测试的教程
Apr 20 Python
python 动态加载的实现方法
Dec 22 Python
Django框架模板注入操作示例【变量传递到模板】
Dec 19 Python
python按照多个条件排序的方法
Feb 08 Python
利用Python+阿里云实现DDNS动态域名解析的方法
Apr 01 Python
python基于itchat模块实现微信防撤回
Apr 29 Python
python实现海螺图片的方法示例
May 12 Python
图文详解python安装Scrapy框架步骤
May 20 Python
Django ModelForm操作及验证方式
Mar 30 Python
Matplotlib绘制混淆矩阵的实现
May 27 Python
在win64上使用bypy进行百度网盘文件上传功能
Jan 02 #Python
pytorch实现onehot编码转为普通label标签
Jan 02 #Python
pytorch标签转onehot形式实例
Jan 02 #Python
Python socket聊天脚本代码实例
Jan 02 #Python
解决Pytorch训练过程中loss不下降的问题
Jan 02 #Python
Pytorch evaluation每次运行结果不同的解决
Jan 02 #Python
Python for循环与getitem的关系详解
Jan 02 #Python
You might like
5.PHP的其他功能
2006/10/09 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
原生js开发的日历插件
2017/02/04 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
JavaScript计算正方形面积
2019/11/26 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
vue-router 按需加载 component: () =&gt; import() 报错的解决
2020/09/22 Javascript
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
python使用append合并两个数组的方法
2015/04/28 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
利用python批量给云主机配置安全组的方法教程
2017/06/21 Python
python+pygame简单画板实现代码实例
2017/12/13 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
如何开启linux的ssh服务
2013/06/03 面试题
优秀民警事迹材料
2014/01/29 职场文书
工作会议方案
2014/05/21 职场文书
个人授权委托书样本
2014/09/13 职场文书
感谢信格式范文
2015/01/22 职场文书
未婚证明范本
2015/06/15 职场文书
校园广播稿范文
2015/08/19 职场文书
详解Python中__new__方法的作用
2022/03/31 Python