首页 > 其他 > 详细

068 hashlib模块

时间:2019-08-17 01:00:28      阅读:118      评论:0      收藏:0      [点我收藏+]

hashlid模块

  • hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值。
  • hash值的特点:
    1. 只要传入的内容一样,得到的hash值一样,可用于非明文密码传输时密码校验
    2. 不能由hash值返解成内容,即可以保证非明文密码的安全性
    3. 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的,可以用于对文本的哈希处理
  • hash算法其实可以看成如下图所示的一座工厂,工厂接收你送来的原材料,经过加工返回的产品就是hash值
import hashlib # 导入hashild模块

m = hashlib.md5()  # 固定的写法
m.update(b'123456')
m.update(b'456')

print(m.hexdigest())
# 123 456 --》 e10adc3949ba59abbe56e057f20f883e
# 123456 --》 e10adc3949ba59abbe56e057f20f883e

1. 变成固定的字符串
2. 相同的字符串哈希后结果一样
3. 叠加性
  • 破解hash加密

    hash加密算法虽然看起来很厉害,但是他是存在一定缺陷的,即可以通过撞库可以反解,如下代码所示。

    import hashlib
    
    # 假定我们知道hash的微信会设置如下几个密码
    pwd_list = [
        'hash3714',
        'hash1313',
        'hash94139413',
        'hash123456',
        '123456hash',
        'h123ash',
    ]
    
    def make_pwd_dic(pwd_list):
        dic = {}
        for pwd in pwd_list:
            m = hashlib.md5()
            m.update(pwd.encode('utf-8'))
            dic[pwd] = m.hexdigest()
        return dic
    
    def break_code(hash_pwd, pwd_dic):
        for k, v in pwd_dic.items():
            if v == hash_pwd:
                print('hash的微信的密码是===>%s' % k)
    
    hash_pwd = '0562b36c3c5a3925dbe3c4d32a4f2ba2'
    break_code(hash_pwd, make_pwd_dic(pwd_list))
    
    
    # hash的微信的密码是===>hash123456

068 hashlib模块

原文:https://www.cnblogs.com/xichenHome/p/11366355.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!