【转】python模块分析之hashlib加密(二)

hashlib模块是用来对字符串进行hash加密的模块,明文与密文是一一对应不变的关系;用于注册、登录时用户名、密码等加密使用。
一.函数分析:
1.共有5种加密算法:
md5(),sha1(),sha224(),sha256(),sha384(),sha512(),分别得到不同的加密密文。
2.hashlib.hexdigest():获取加密的密文,16进制,无参数。
3.hashlib.digest():获取加密的密文,二进制,无参数。
4.hashlib.copy():复制一份当前创建的hash对象,无参数。
5.update(str1.encode("utf-8")):更新加密的密文,得到的密文与原来的密文不相同。

hash.name:查看当前获得的hash对象的加密算法;

hash.digest_size:hash密文占多少个字节;

hash.block_size:hash数据块的大小。

hashlib.algorithms_guaranteed:查看所有平台都支持的hash算法;

hashlib.algorithms_available:查看所有的hash加密算法。


二。运用:
1.创建哈希对象,有两种方式:
m = hashlib.new("md5",b"cai") # 选择md5加密函数加密字符串“cai”
m = hashlib.md5("cai".encode("utf-8")) # 加密的另一种写法

2.特殊用法:当需要加密的字符串过大的时候,可以使用同一个hash对象分多次加密,update(a)+update(b)=update(a+b).
举例:

 m = hb.md5()
m1 = m.copy()
m.update("a".encode("utf-8"))
m.update("b".encode("utf-8"))
print(m.hexdigest()) # 输出密文1
m1.update("ab".encode("utf-8"))
print(m1.hexdigest()) # 输出与密文1完全相同的密文2

 三、hash算法的解密

加密算法得到的密文不可逆,但是密文与明文之间的关系是一一对应的,这就使得解密出现了可能,目前对于简单的、迭代次数少或不加盐处理密文,常用

方法是用大数据储存密文与明文的对应关系。

如常用的解密网站:http://www.cmd5.com/

通过输入密文查找对应的明文。

为了增大破解的难度,一般需要对密码进行多次迭代加密和加盐处理,hashlib模块有一个专门的函数。

 import hashlib as hb
import binascii
# sha256为算法名称,123456789为要加密的密码,
# salt指的是杂质,额外的东西,使得更加难破解,10000是迭代次数,可以理解成加密次数。
dk = hb.pbkdf2_hmac('sha256', b'', b'salt', 10000) # 密码和杂质都需要是二进制类型
print(binascii.hexlify(dk).decode("utf-8"))

代码举例:

 import hashlib as hb

 def hash_fun(str1):
m = hb.md5(str1.encode("utf-8")) # 创建一个hash对象,并对str1加密
print(m.hexdigest()) # 输出得到的密文
m.update(str1.encode("utf-8")) # 更新密文
print(m.hexdigest()) # 输出更新密文,与前面不再相同
print(m.digest()) # 获取字节密文
print(m.block_size) # 获取hash块的大小
print(m.digest_size) # 获取密文的字节数
print(m.name) # 获取加密算法的名字md5 def hash_fun2(str1):
m = hb.md5(str1.encode("utf-8"))
print(m.hexdigest())
a = m.copy() # 拷贝一个hash对象
print(a.hexdigest()) # 得到的密文没改变 def hash_fun1(str1):
m = hb.sha1(str1.encode("utf-8")) # sha1算法加密
print(m.hexdigest())
m1 = hb.sha224(str1.encode("utf-8")) # sha224算法加密
print(m1.hexdigest()) def hash_fun3():
m = hb.md5()
m1 = m.copy()
m.update("a".encode("utf-8"))
m.update("b".encode("utf-8"))
print(m.hexdigest())
m1.update("ab".encode("utf-8"))
print(m1.hexdigest()) if __name__ == '__main__':
hash_fun("cai")
print()
hash_fun1("cai")
print()
hash_fun2("cai")
print()
hash_fun3()

结果如下:

【转】python模块分析之hashlib加密(二)的更多相关文章

  1. python模块分析之hashlib加密(二)

    前言 hashlib模块是py3.+用来对字符串进行hash加密的模块,核心算法是md5,明文与密文是一一对应不变的关系:用于注册.登录时用户名.密码等加密使用. 模块分析 hashlib模块有多种加 ...

  2. 【转】python模块分析之collections(六)

    [转]python模块分析之collections(六) collections是Python内建的一个集合模块,提供了许多有用的集合类. 系列文章 python模块分析之random(一) pyth ...

  3. 【转】python模块分析之unittest测试(五)

    [转]python模块分析之unittest测试(五) 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块分析之typing(三) p ...

  4. 【转】python模块分析之typing(三)

    [转]python模块分析之typing(三) 前言:很多人在写完代码一段时间后回过头看代码,很可能忘记了自己写的函数需要传什么参数,返回什么类型的结果,就不得不去阅读代码的具体内容,降低了阅读的速度 ...

  5. 【转】python模块分析之logging日志(四)

    [转]python模块分析之logging日志(四) python的logging模块是用来写日志的,是python的标准模块. 系列文章 python模块分析之random(一) python模块分 ...

  6. python模块分析之typing(三)

    前言:很多人在写完代码一段时间后回过头看代码,很可能忘记了自己写的函数需要传什么参数,返回什么类型的结果,就不得不去阅读代码的具体内容,降低了阅读的速度,加上Python本身就是一门弱类型的语言,这种 ...

  7. python模块分析之logging日志(四)

    前言 python的logging模块是用来设置日志的,是python的标准模块. 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块 ...

  8. python模块详解 hashlib

    hashlib模块 用于加密相关的操作,在python3中替代了md5和sha模块,主要提供SHA和MD5算法. MD5 import hashlib m = hashlib.md5() #调用md5 ...

  9. python模块学习之hashlib模块学习

    # 加密模块 import hashlib # md5 加密 md5 # 1.初始化md5模块 生成md5对象 # 2.引入要加密的数据 update # 3.获取加密值 hexdigest m = ...

随机推荐

  1. awk统计文件大小

    在Linux系统中,经常会遇到某个目录下文件很多,要统计这些文件的空间大小.可以采用awk来实现.如下是实现这个功能的例子. vim sum.sh #!/bin/bash# sum.shcd //ba ...

  2. 【clustering】之K-means && K-medoids

    k-means k-medoids 一.clustering 中的 loss function 关于聚类的性能评价标准 参考博客 可以为外部指标和内部指标,其中外部指标是指 聚类结果与某个 “参考模型 ...

  3. window下Nexus私服高级搭建

    环境是:nexus-2.1.1.maven-3.0.4.jdk-1.6.0_32 一.用admin用户登陆nexus nexus的下载和安装都很简单 1.下载 http://www.sonatype. ...

  4. ElasticSearch的插件(Plugins)介绍

    ElasticSearch的插件(Plugins)介绍 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 目前可以扩展ElasticSearch功能的插件有很多,比如:添加自定义的映 ...

  5. Nginx简单手册

    Nginx 变量 变量名 注解 $arg_name 请求中的的参数名,即“?”后面的arg_name=arg_value形式的arg_name $args  请求中的参数值 $binary_remot ...

  6. springboot中通用mapper结合mybatis generator的使用

    通用mapper就是指的是  tk.mybatis  包下的.这个是通用mapper就是说自动生成的dao层需要继承这个框架提供的mapper类.而我们之前用的org.mybatis这个最开始是普通的 ...

  7. Linux记录-salt分析

    salt-master建立分组 如dn: 'L@dnxxx,dyyy' salt -N dn  state.apply  hadoop test=true salt -N dn  cmd.run  ' ...

  8. Hbase记录-zookeeper部署

    #官网下载二进制包解压到/usr/app下,配置/etc/profile: export ZOOKEEPER_HOME=/usr/app/zookeeper export PATH=$PATH:$ZO ...

  9. HDU - 5119 Happy Matt Friends(dp)

    题目链接 题意:n个数,你可以从中选一些数,也可以不选,选出来的元素的异或和大于m时,则称满足情况.问满足情况的方案数为多少. 分析:本来以为是用什么特殊的数据结构来操作,没想到是dp,还好队友很强. ...

  10. 【Linux】排序命令sort

    很多时候,我们都会去计算一次数据里头的相同型态的数据总数,举例来说, 使用 last 可以查得这个月份有登陆主机者的身份.那么我可以针对每个使用者查出他们的总登陆次数吗? 此时就得要排序与计算之类的命 ...