pythonhash使用

详解python中的hashlib模块的使用

hashlib

hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法

hashlib模块

#哈希算法也叫摘要算法,相同的数据始终得到相同的输出,不同的数据得到不同的输出。
#(1)哈希将不可变的任意长度的数据,变成具有固定长度的唯一值
#(2)字典的键值对映射关系是通过哈希计算的,哈希存储的数据是散列(无序)

# 应用场景:在需要效验功能时使用
 用户密码的 => 加密,解密
 相关效验的 => 加密,解密

hashlib中的md5算法

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • # 第一步是引包
  • import hashlib
  • # 创建一个md5算法的对象
  • hs = hashlib.md5()
  • # print(hs)
  • # update中的 参数必须是二进制字节流
  • hs.update("123".encode())
  • ## hexdigest 返回32位十六进制的字符串(固定长度)
  • ## 用一个hsvar来接收经过哈希算法返回的值
  • hsvar = hs.hexdigest()
  • #加盐 (就是在简单的算法中进行加入混肴参数)

    语法格式如下:

     

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • #首先在实例化hashlib中的md5对象的时候,加入混淆参数key,以此达到更加复杂的加密)
  •  
  • #加入的key参数一定也要是字节流
  • hs2 = hashlib.md5("abcd".encode())
  • hs2.update("123123".encode())
  • hs2var = hs2.hexdigest()
  • 加盐后的好处就是,增加了加密的安全性,使其不那么容易被破解

    但因为hash算法是被公开的算法,其安全性不那么好,一些简单的加密 值很容易被逆向破解出来,说逆向破解也不那么准确,

    一般来说,破解此类算法只能使用穷举法, 可以将 跑出来的值存入到一个大的数据库中,哈希算法得出的值有唯一性,所以可以反向查询已有的hash值来得到原始数据,当然这种网站也有, 我百度上看到的一个网站,你们可以进去看一看,一般的哈希值都能查询到原数据,只要他们数据库中有的话.

    所以说最好的方法就是我们要加盐,去加入复杂混肴参数,这样的话大大提高了数据加密的安全性

    链接: https://www.cmd5.com/  md5解密(本链接只作为学习使用,勿将其使用到任何非法用途)

    在开发编程中,常用到hash算法的方面应该有用户的注册登录

    下面有我写的一个实例,供大家参考(为了方便大家的阅读,这个注册登录功能我没有完善,比如说用正则去卡用户名和密码的格式等等,)

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • import hashlib
  • #定义一个加密函数,将传入的参数转换成32位的哈希值并返回
  • def md5(pwd):
  •   md5_password = hashlib.md5("abd".encode())
  •   md5_password.update(pwd.encode())
  •   return md5_password.hexdigest()
  • #定义一个登录函数,将传入的账号密码与本地密码文件进行匹配,如果匹配到返回true
  • def login(user,pwd):
  •   with open("database","r",encoding="utf-8") as fp:
  •     for line in fp :
  •       u,p = line.strip().split("|")
  •       if u == user and p == md5(pwd):
  •         return true
  • #定义一个注册的函数,将用户传入的账号密码写入到本地的密码文件中
  • def register(user,pwd):
  •   with open("database","w",encoding="utf-8") as fp:
  •     temp = user+ "|" + md5(pwd)
  •     fp.write(temp)
  • #index菜单,给用户的交互
  • choice = input("1表示登录, 2表示注册:").strip()
  • if choice == "2":
  •   user = input("用户名:")
  •   pwd = input("密码:")
  •   register(user,pwd)
  • elif choice == "1":
  •   user = input("用户名:")
  •   pwd = input("密码:")
  •   r = login(user,pwd)
  •   if r == true:
  •     print("登录成功")
  •   else:
  •     print("登录失败")
  • else:
  •   print("账号不存在")
  •  hashlib中的sha算法

    •# sha 加密效率低,算法精密,安全性高
    •sha: secure hash algorithm(安全哈希算法)

       sha是美国国家标准与技术研究院与美国国家安全局设计,从94年以来被广泛使用的加密算法.sha系列中的sha1, sha224, sha2556适用于长度不超过2^64二进制位的消息。sha384和sha512适用于长度不超过2^128二进制位的消息。不过,这个也不太安全.2005年的时候国内王小云教授及其团队在sha1算法的破译上就已经取得了很大的成就.今年谷歌已经攻破了sha1算法.另外,matthew green(https://twitter.com/matthew_d_green)在这一领域也有不错的成就.

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • import hashlib
  • #实例化sha1对象
  • hs3 = hashlib.sha1()
  • #去将要去加密的数据通过一个方法放入对象中
  • hs3.update('123123'.encode())
  • #调用对象中的方法,计算并输出加密后的40位的哈希值
  • hsvar = hs3.hexdigest()
  • sha算法常用的有 sha1 sha512等,语法一样,只不过输出的哈希值的长度不一样,所以就不一一列举了

    总结

    以上所述是小编给大家介绍的python中的hashlib模块的使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!

    如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

    原文链接:https://www.cnblogs.com/bruce-chen/p/10742690.html