python加密模块教程_Python加密模块的hashlib,hmac模块使用解析

ebb0cd79d49cf6d02b168bc4f5dda777.png

这篇文章主要介绍了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
202cb962ac59075b964b07152d234b70
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位。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SCREEN屏幕编程时候必须保证SCREN中词典的字段格式必须和数据表中字段的类型长度一致!...

此时任意操作都会出现如下问题 /h调试 回车调试被激活任意操作 执行到第23行时候报错“请输入一个数值”,检查数据表中字段参考数据元素以及对应的域均是char类型,此时检查screen屏幕设置字段类型,/n退出程序 重新进入程序 单击 点击屏幕9000…

zabbix 3.0.3 (nginx)安装过程中的问题排错记录

特殊注明:安装zabbix 2.4.8和2.4.6遇到2个问题,如下:找了很多解决办法,实在无解,只能换版本,尝试换(2.2.2正常 | 3.0.3正常)都正常,最后决定换3.0.31、Error connecting …

Java锁实现

我们都使用第三方库作为开发的正常部分。 通常,我们无法控制其内部。 JDK随附的库是一个典型示例。 这些库中的许多库都使用锁来管理竞争。 JDK锁具有两种实现。 人们使用原子CAS样式指令来管理索赔过程。 CAS指令往往是最昂贵的CPU指令类型,并且在x86上…

一键生成APP官网

只需要输入苹果下载地址,安卓市场下载地址,或者内测下载地址,就能一键生成APP的官网,方便在网上推广。 好推APP官网 www.hotapp.cn/app 转载于:https://www.cnblogs.com/likwo/p/6223889.html

Quartz 2 Scheduler示例

Quartz是一个开源作业调度框架。 它可用于管理和计划应用程序中的作业。 步骤1:建立已完成的专案 创建一个Maven项目,如下所示。 (可以使用Maven或IDE插件来创建它)。 步骤2:图书馆 Quartz依赖项已添加到Maven的po…

如何通过网线连接两台电脑快速传输数据?

介绍 我们经常需要拷贝文件会用到类似U盘等工具,但我们有时在传输大文件时又苦于没有,那么大内存的转存工具。这时候我们就可以通过一条小小的网线连接两台电脑,形成一个小的局域网传输数据,因为是通过网线传输,所以传…

2012年I / O之后

从注册到赠品,每年的I / O疯狂都在不断发展。 在今年20分钟内被出售,并没有阻止Google赠送更多的东西。 以这种速度并有望在明年发布Google Glass,明年注册很可能会变得更加混乱! 因此,Google,请停止提供免…

h5启动原生APP总结

许久没有写博客了,最近有个H5启动APP原生页面的需求,中间遇上一些坑,看了些网上的实现方案,特意来总结下 一、需要判断客户端的平台以及是否在微信浏览器中访问 1、客户端判断 在启动APP时,Android和IOS系统处理的方式…

什么时候使用Apache Camel?

Apache Camel是JVM / Java环境中我最喜欢的开源框架之一。 它可以轻松集成使用多种协议和技术的不同应用程序。 本文介绍了何时使用Apache Camel以及何时使用其他替代方法。 问题:企业应用程序集成(EAI) 由于新产品和新应用,几乎…

软工个人总结

目录 一、个人提升二、写下属于自己的人月神话三、对下一届、后来人、自己的建议四、我的团队——Clover五、关于代码质量六、学过软件工程?七、自我介绍八、个性发挥一、个人提升 1. 开学初的目标 希望通过团队合作领会团队合作的内在精神,希望在分工完…

排序算法之(7)——堆排序

【堆排序的思路】 堆排序主要是利用了堆的性质。对于大顶堆:堆中的每一个节点的值都不小于它的孩子节点的值,具体可參考我的还有一篇博客http://blog.csdn.net/adminabcd/article/details/46880591,那么大顶堆的堆顶元素就是当前堆中全部元素…

重新登录:重新登录

嗨,我再次回到日志中来,这是任何应用程序设计和开发的固有部分。 我是坚强的基础知识的忠实拥护者,在我的拙见中,日志记录是任何企业级应用程序中经常被忽略但基本的关键要素之一。 我已经写在此之前这里 。 为了理解当前文章&…

分治1--二分查找

分治1--二分查找 一、心得 二、题目和分析 三、代码和结果 1 #include <iostream>2 using namespace std;3 int a[10]{1,2,4,5,7,8,9,10,13,20};4 5 6 //非递归 7 int find(int i){8 int l0,r9;9 int mid(lr)/2; 10 while(l<r){ 11 mid(lr)/2; 12…

Spring自定义命名空间

Spring自定义命名空间提供了一种很好的方式来简化用于描述Spring应用程序上下文的bean定义的xml文件。 这是一个相当古老的概念&#xff0c;最初是在Spring 2.0中引入的&#xff0c;但值得不时地进行审查。 考虑一种情况&#xff0c;必须为没有自定义名称空间的Spring MVC应用程…

预告片:裸指关节SOA

我正在研究这个想法&#xff0c;但我不知道它是否对你们有吸引力。 我想就您是否需要进一步探讨提出您的意见。 达成协议&#xff1a;我遇到过一些团队&#xff0c;他们在使用SOA技术时由于其工具的复杂性而陷入泥潭。 我只在Java中看到过这种情况&#xff0c;但是我从一些C&am…

JMX和Spring –第1部分

这是三篇文章的第一篇&#xff0c;这三篇文章将展示如何通过JMX支持为Spring应用程序赋能。 Maven配置 这是用于设置此示例代码的Maven pom.xml&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSche…

java婚庆网站源码_基于jsp的婚庆网站-JavaEE实现婚庆网站 - java项目源码

基于jspservletpojomysql实现一个javaee/javaweb的婚庆网站, 该项目可用各类java课程设计大作业中, 婚庆网站的系统架构分为前后台两部分, 最终实现在线上进行婚庆网站各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类婚庆网站相关的实体进行管理。该婚庆…

JQuery实现的模块交换动画效果

<!doctype html> <html><head><meta http-equiv"content-type" content"text/html;charsetutf-8" /><title>JQuery实现的模块交换动画效果</title><meta name"Keywords" content"jquery&#xff0c…

JMX和Spring –第2部分

这篇文章从本教程的第1部分继续。 嗨&#xff0c;在我的前一篇文章中&#xff0c;我解释了如何通过Spring设置JMX服务器以及如何通过身份验证和授权保护对它的访问。 在本文中&#xff0c;我将展示如何实现一个简单的MBean&#xff0c;该MBean允许用户在运行时更改Log4j记录器…

android p wifi一直在扫描_(一百六十八)Android P wifi 扫描失败结果上报流程梳理-扫描上报梳理②...

接(一百五十五)Android P wifi 扫描失败结果上报流程梳理-扫描上报梳理 扫描失败上报梳理发现梳理的差了很多&#xff0c;特补充1.WificondScannerImplOverridepublic boolean startSingleScan(WifiNative.ScanSettings settings,WifiNative.ScanEventHandler eventHandler) {i…