Python加密模块的hashlib,hmac模块使用解析
作者:就是想学习 发布时间:2022-12-10 10:18:57
这篇文章主要介绍了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位。
来源:https://www.cnblogs.com/sidianok/p/11853183.html


猜你喜欢
- 前三篇文章中,明确了栅格系统的设计细节和适用范围。这一篇将集中讨论960栅格系统的技术实现。Blueprint的实现Blueprint是一个
- 需求针对tab键带来的多个空格问题,有时候我们针对带空格的一行数据要进行切割,如果有多个空格就会出现就会切割空格出现,我们想把空格都去掉,所
- location.href这个东西常常用于跳转,location既是window对象的属性,又是document对象的属性。JavaScri
- 1.简要概述为什么要开通MySQL这个学习板块呢?因为这是一名数据分析师必要的一项技能。分析数据什么最重要?当然是数据,既然如此!在数据呈现
- 1、下载MySQL官方的mysql-connector-python-8.0.17-py3.7-windows-x86-64bit.msi,
- 我就废话不多说了,大家还是直接看代码吧!import pandas as pddef get_under_rolling(df,window
- 一、object类的源码class object: """ The most bas
- 1、 isalnum() :判断字符串所有的字符都是字母或者数字。返回true和falseIn [1]: str1='jiangwe
- 我们之前要想在调度里面实现延时执行,我们可以使用管道阻塞,直到有人往管道里面写东西才变通畅,还可以使用sleep来睡觉,但是睡觉的过程,协程
- 为了优化OceanBase的query timeout设置方式,特调研MySQL关于timeout的处理,记录如下。 mysql> s
- 本文实例讲述了python3.6生成器yield用法。分享给大家供大家参考,具体如下:今天看源码的时候看到了一个比较有意思的函数:yield
- 采用双重循环。把图片进行“.”分割后名字问前面部分,那其余数据库中的 图片路径记录进行对比 采用vb的InStr函数 如果存在的话返回值&g
- 如果网页处于焦点状态返回true,否则返回fasle 什么是焦点?焦点是指用户是否活动在该页面.确切的说鼠标是否在该网页内活动.或者说该网页
- 一、前言:当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪些受MySQL提携的程序,而是当数据库遭到破坏后,
- 现在网上出现了很多在线换底色的网页版工具是这么做的呢?其实用Python就可以实现。环境要求Python3 numpy函数库 opencv库
- 一个网站的导航就相当于是一条路的路标,不同的是,网站的不同栏目页的入口远远比马路要来得复杂,所以一个清晰的导航设计对于一个网站的意义远远大于
- 在实际工作中,无论是对数据库系统(DBMS),还是对数据库应用系统(DBAS),查询优化一直是一个热门话题。一个成功的数据库应用系统的开发,
- 声明定位元素:position属性值设置除默认值static以外的元素,包括relative,absolute,fixed。平台:win/I
- 1.准备工作1.在文件里找到设置2.在项目里找到python解释器,点击右边的加号3.搜素pygame并安装同理下载pgzero安装包2.开
- 本文实例讲述了Java开发之Spring连接数据库方法。分享给大家供大家参考,具体如下:接口:package cn.com.service;