常见的哈希算法有MD5和SHA系列。目前,MD5和SHA1已经被破解。一般建议至少使用SHA2-256算法。接下来,我们将通过本文介绍Python中哈希加密的介绍和用法。感兴趣的朋友来看看吧。
目录
概念特征简介hash有哪些算法?碰撞、salt和防碰撞加密hashlib主要方法、唯一方法、使用方法、salt和crypt指令、密码加密的应用、一致性检查的应用
简介
概念
哈希算法,也称为散列算法和哈希算法,是一种从任意文件创建小数字指纹的方法。哈希算法和指纹一样,是用简短的信息保证文件唯一性的标志。这个符号关系到文件的每一个字节,很难找到逆规律。因此,当原始文件发生变化时,其标志值也会发生变化,从而告诉文件用户当前文件不再是您需要的文件。
简单来说,Hash就是通过某种算法将任意一段数据生成唯一的固定长度的一段数据。
哈希值也可以看作是文件的指纹,因为它是文件唯一性的标志,与每个字节都有关系。当文件改变时,指纹值也会改变。
如果把哈希算法比作一个工厂,传递给哈希算法的内容就是原料产生的哈希值就是生产出来的产品。
特点
快速:给定明文和哈希算法,可以在有限的时间和有限的资源内计算哈希值。
只要传入的内容相同,获得的哈希值就必须相同。
逆向难度:给定哈希值,很难在有限的时间内推导出明文输入敏感度。原始输入信息的任何变化都会导致新哈希值的巨大变化。冲突避免:很难找到两个内容不同的明文,使它们的哈希值一致且长度固定。只要我们使用哈希算法,无论传入的内容有多大,得到的哈希值的长度都是固定的信息抽象。Hash只是信息的汇总,信息指纹用于数据识别。
hash有哪些
常见的哈希算法有MD5和SHA系列。目前,MD5和SHA1已经被破解。一般建议至少使用SHA2-256算法。
哈希算法输出长度(位)输出长度(字节)MD 5128位16字节ripemd160160bits位20字节sha-1160位20字节sha-256256位s32字节sha-512512位64字节
算法碰撞
稍微思考一下就可以发现,既然输入数据不是定长的,但是输出哈希值是定长的,也就是说哈希值是有限集,而输入数据可以是无限多的,那么建立一一对应的关系显然是不现实的。所以“碰撞”是必然会发生的,所以一个成熟的哈希算法会有更好的防碰撞性。同时,在实现哈希表的结构时要考虑哈希碰撞的问题。
比如“666”哈希后是“FAE0B27C451C728867A 567E8CB4E53”,同样的哈希算法得到的值是一样的。比如WiFi密码是8位纯数字,最多有999999种可能。破解这个密码需要做的就是预先生成一个0到1亿个数字的哈希值,然后做1亿次布尔运算(也就是Bool值判断,0或者1)。现在普通I5四核CPU每秒可以达到200亿次浮点数运算。做一亿次布尔运算,也就是秒的时间,破解了由8个大小写字母、数字、特殊符号组成的密码。如果按照MD5加密,哈希值大概是10000亿,i9计算能力是每秒1000亿。也需要至少24小时。这只是极端情况。如果加密算法不确定(比如3),加上请求时间(比如3),查询时间(比如3),已经需要半年左右。如果加上错误等待时间(比如输入5次错误后24小时),就已经50年了。
当然,如果有三万台电脑同时破解,还是要一天-_-|||。
但道高一尺魔高一丈。谁会傻到站着打架等着受伤?这都是相对的
所以尽量不要用纯数字做密码,因为没有任何安全性可言。
加盐防碰撞
对数字内容进行散列,并且获得唯一的抽象值以引用原始的完整数字内容。哈希函数的防冲突属性用于确保内容未被篡改。
它常用于用户名和密码中,以确保用户信息的安全。为了防止攻击,加入了salt,也就是在原明文上加一个随机数后的哈希值。哈希值和盐会分两个地方存储,只要不同时泄露就很难被破解。
加密
在Python中,如果需要对用户输入的密码或其他内容进行加密,首选的方法是生成哈希值。
在Python中,可以使用两个模块:
crypthashlib
hashlib
主要方法
使用:hashlib.md5()
描述md5(…)加密sha1(…)用md5算法加密sha224(…)用sha 224算法加密sha256(…)用sha384算法加密sha 384(…)用sha512算法加密SHA512
特有方法
如果使用Hashlib生成一个哈希对象,哈希对象将包含以下方法
描述更新(arg)可以使用特殊的加密算法重用哈希对象。加密参数。digest(…)以字符形式返回加密内容。hexdigest(…)返回十六进制形式的加密内容。copy(…)克隆散列对象,以便重用散列对象。
使用方法
直接使用hashlib方法
导入hashlib
Hash.sha224('没有人检查垃圾邮件重复'。encode(' UTF-8 ')#加密
Hash.sha224('没有人检查垃圾邮件重复'。编码(“UTF-8”)。Hexdigest () #返回加密内容。
在直接哈希对象中使用方法。
导入hashlib
#建造工厂
m=hashlib.md5()
#投入原材料
m.update('没人检查')。编码(' utf-8 '))
#输出哈希值
m .文摘()
m.update(“垃圾邮件重复”)。编码(' utf-8 '))
m .文摘()
六角文摘
加盐
导入hashlib
#建造工厂
m=hashlib.md5('这是盐'。编码(' utf-8 '))
#投入原材料
m.update('没人检查')。编码(' utf-8 '))
#输出哈希值
m .文摘()
m.update(“垃圾邮件重复”)。编码(' utf-8 '))
m .文摘()
六角文摘
crypt
主要方法
类型描述crypt(…)方法hash指定内容mksalt(…)方法根据加密算法生成saltmethodslist并返回可用加密算法列表MOTHOD _ CRYPT常量加密算法METHOD_md5常量md5加密算法METHOD_sha256常量sha256加密算法METHOD_sha512常量sha512加密算法
使用说明
当使用crypt.crypt(…)进行哈希加密时,需要提供两个参数:
加密内容盐
导入加密
salt=crypt.mksalt(crypt。方法_SHA512)
hash=crypt.crypt('helloworld ',salt)
应用
密码加密
m=hashlib.md5()
米(meter的缩写))更新('键')。encode(' UTF-8 ')#再加一个元素来提高密码的复杂度,而不是加盐。
m . update(password . encode(' utf-8 '))
打印(m.hexdigest())
应用一致性校验
m=hashlib.md5()
用open(r'E:\01.mp4 ',' rb ')作为f:
对于f中的行:
m .更新(行)
印刷(m.hexdigest)
关于Python哈希加密的这篇文章到此为止。有关Python哈希加密的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。