hash加密算法,HASH加密

  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 亿次布尔运算也就是秒级别的时间就破解了

  • 8位大小写字母、数字、特殊符号组成的密码,若按照MD5加密,则hash值大概10000千亿,i9算力每秒1千亿。也需要至少24h。这只是极端情况下,如果加上加密算法不确定(比如3),请求时间(比如3),查询时间(比如3),这就已经需要半年左右,倘若再加上错误等待时间(比如输入5次错误等待24小时),那就已经需要50年。。。
  •   当然,如果有三万台电脑同时破解,也还是一天 -_-。
    不过道高一尺,魔高一丈。谁又会傻乎乎的一个站着打一个等着挨。都是相对的

      所以密码尽量不要用纯数字,因为根本没有任何安全性

      

      

    加盐防碰撞

      对数字内容进行 Hash 运算,获取唯一的摘要值来指代原始完整的数字内容,利用 Hash 函数的抗碰撞性来确保内容未被篡改

      常用于用户名和密码来确保用户信息安全,为了防止攻击会采用加盐的方法,就是原来的明文加上一个随机数之后的 Hash 值,Hash 值和盐会保存在两个地方,只要不是同时泄漏就很难被破解

      

      

    加密

      如果在Python中需要对用户输入的密码或者其他内容进行加密,首选的方法是生成hash值

      在Python中可以利用二个模块来进行:

      

    • crypth
    • ashlib

      

      

    hashlib

      

      

    主要方法

      使用:hashlib.md5()

      名称描述md5(…)利用md5算法加密sha1(…)利用sha1算法加密sha224(…)利用sha224算法加密sha256(…)利用sha256算法加密sha384(…)利用sha384算法加密sha512(…)利用sha512算法加密

      

      

    特有方法

      如果你利用hashlib生成了一个Hash对象,那么这个Hash对象会包含如下方法

      名称描述update(arg)可以重复利用指定了特殊加密算法的Hash对象,对arg进行加密digest(…)以字符形式返回加密内容hexdigest(…)以16进制形式返回加密内容copy(…)为了达到重复利用Hash对象的目的,而克隆Hash对象

      

      

    使用方法

      直接使用hashlib方法

      

    import hashlib

      hashlib.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(…)方法对指定内容进行hash加密mksalt(…)方法根据加密算法生成saltmethodslist返回可用加密算法的列表MOTHOD_CRYPT常量加密算法METHOD_MD5常量md5加密算法METHOD_SHA256常量sha256加密算法METHOD_SHA512常量sha512加密算法

      

      

    使用说明

      使用crypt.crypt(…)进行hash加密的时候,需要提供二个参数:

      

    • 加密内容
    • salt

      

    import crypt

      salt = 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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

    留言与评论(共有 条评论)
       
    验证码: