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的类方法和静态方法
Dec 13 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
Jul 11 Python
Python处理PDF及生成多层PDF实例代码
Apr 24 Python
python进阶_浅谈面向对象进阶
Aug 17 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
Sep 26 Python
python实现对excel进行数据剔除操作实例
Dec 07 Python
分析python切片原理和方法
Dec 19 Python
详解Python中的format格式化函数的使用方法
Nov 20 Python
Python3 全自动更新已安装的模块实现
Jan 06 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
Java byte数组操纵方式代码实例解析
Jul 22 Python
python实现网络五子棋
Apr 11 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
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
javascript鼠标滑过显示二级菜单特效
2020/11/18 Javascript
Angularjs中的页面访问权限怎么设置
2016/11/11 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
Vue实现验证码功能
2019/12/03 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
python读取ini配置文件过程示范
2019/12/23 Python
Python调用钉钉自定义机器人的实现
2020/01/03 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
美国知名的隐形眼镜电商:Contacts America
2019/11/19 全球购物
酒店开业策划方案
2014/06/02 职场文书
个人融资协议书
2014/10/02 职场文书
春节慰问信范文
2015/02/15 职场文书
护士自荐信怎么写
2015/03/06 职场文书
学术会议通知
2015/04/15 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
刑事撤诉申请书
2015/05/18 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
go goroutine 怎样进行错误处理
2021/07/16 Golang
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android
一级电子管军用接收机测评
2022/04/05 无线电
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python