hash加密算法,HASH加密
常见的哈希算法有MD5和SHA系列。目前,MD5和SHA1已经被破解。一般建议至少使用SHA2-256算法。接下来,我们将通过本文介绍Python中哈希加密的介绍和用法。感兴趣的朋友来看看吧。
00-1010概念特征介绍hash有哪些算法?碰撞、salt和防碰撞加密hashlib主要方法、唯一方法、使用方法、salt和crypt指令、密码加密、一致性检查
目录
简介
哈希算法,也称为散列算法和哈希算法,是一种从任意文件创建小数字指纹的方法。哈希算法和指纹一样,是用简短的信息保证文件唯一性的标志。这个符号关系到文件的每一个字节,很难找到逆规律。因此,当原始文件发生变化时,其标志值也会发生变化,从而告诉文件用户当前文件不再是您需要的文件。
简单来说,Hash就是通过某种算法将任意一段数据生成唯一的固定长度的一段数据。
哈希值也可以看作是文件的指纹,因为它是文件唯一性的标志,与每个字节都有关系。当文件改变时,指纹值也会改变。
如果把哈希算法比作一个工厂,传递给哈希算法的内容就是原料产生的哈希值就是生产出来的产品。
概念
快速:给定明文和哈希算法,可以在有限的时间和资源内计算出哈希值。只要传入的内容相同,哈希值就必须相同。
逆向难度:给定哈希值,很难在有限的时间内推导出明文输入敏感度。原始输入信息的任何变化都会导致新哈希值的巨大变化。冲突避免:很难找到两个内容不同的明文,使它们的哈希值一致且长度固定。只要我们使用哈希算法,无论传入的内容有多大,得到的哈希值的长度都是固定的信息抽象。Hash只是信息的汇总,信息指纹用于数据识别。
特点
常见的哈希算法有MD5和SHA系列。目前,MD5和SHA1已经被破解。一般建议至少使用SHA2-256算法。
哈希算法输出长度(位)输出长度(字节)MD 5128位16字节ripemd160160bits位20字节sha-1160位20字节sha-256256位s32字节sha-512512位64字节
hash有哪些
稍微思考一下就可以发现,既然输入数据不是定长的,但是输出哈希值是定长的,也就是说哈希值是有限集,而输入数据可以是无限多的,那么建立一一对应的关系显然是不现实的。所以“碰撞”是必然会发生的,所以一个成熟的哈希算法会有更好的防碰撞性。同时,在实现哈希表的结构时要考虑哈希碰撞的问题。
比如“666”哈希后就是“fae”。
0b27c451c728867a567e8c1bb4e53,相同 Hash 算法得到的值是一样的。比如 WiFi 密码如果是 8 位纯数字的话,顶多就是 99999999 种可能性,破解这个密码需要做的就是提前生成好 0 到 1 亿数字的 Hash 值,然后做 1 亿次布尔运算(就是 Bool 值判断,0 或者 1),而现在普通 I5 四核 CPU 每秒能到达 200 亿次浮点数计算,做 1 亿次布尔运算也就是秒级别的时间就破解了
当然,如果有三万台电脑同时破解,也还是一天 -_-。
不过道高一尺,魔高一丈。谁又会傻乎乎的一个站着打一个等着挨。都是相对的
所以密码尽量不要用纯数字,因为根本没有任何安全性
加盐防碰撞
对数字内容进行 Hash 运算,获取唯一的摘要值来指代原始完整的数字内容,利用 Hash 函数的抗碰撞性来确保内容未被篡改
常用于用户名和密码来确保用户信息安全,为了防止攻击会采用加盐的方法,就是原来的明文加上一个随机数之后的 Hash 值,Hash 值和盐会保存在两个地方,只要不是同时泄漏就很难被破解
加密
如果在Python中需要对用户输入的密码或者其他内容进行加密,首选的方法是生成hash值
在Python中可以利用二个模块来进行:
- crypth
- ashlib
hashlib
主要方法
使用:hashlib.md5()
特有方法
如果你利用hashlib
生成了一个Hash对象,那么这个Hash对象会包含如下方法
arg
进行加密
使用方法
直接使用hashlib方法
import hashlibhashlib.sha224("Nobody inspects the spammish repetition".encode("utf-8")) # 加密
hashlib.sha224("Nobody inspects the spammish repetition".encode("utf-8")).hexdigest() # 返回加密内容
直接使用Hash对象中的方法
import hashlib# 造出工厂
m = hashlib.md5()
# 放入原料
m.update("Nobody inspects".encode(utf-8))
# 产出hash值
m.digest()
m.update("the spammish repetition".encode("utf-8"))
m.digest()
m.hexdigest()
加盐
import hashlib# 造出工厂
m = hashlib.md5("this is salt".encode("utf-8"))
# 放入原料
m.update("Nobody inspects".encode(utf-8))
# 产出hash值
m.digest()
m.update("the spammish repetition".encode("utf-8"))
m.digest()
m.hexdigest()
crypt
主要方法
使用说明
使用crypt.crypt(…)进行hash加密的时候,需要提供二个参数:
- 加密内容
- salt
import cryptsalt = crypt.mksalt(crypt.METHOD_SHA512)
hash = crypt.crypt("helloworld",salt)
应用
密码加密
m=hashlib.md5()m.update(key.encode(utf-8)) #添加个其他元素,提升密码复杂度,不是加盐
m.update(password.encode(utf-8))
print(m.hexdigest())
应用一致性校验
m = hashlib.md5()with open(rE: 1.mp4,rb) as f:
for line in f:
m.update(line)
print(m.hexdigest)
到此这篇关于Python中hash加密的文章就介绍到这了,更多相关Python hash加密内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。