什么是Hash呢?

hash(哈希)是一类算法(如md5),hash算法又称为散列表(hash table),也叫做哈希表,该算法接受传入的内容,经过运算得到一串hash值(字符串)

hash值的特点:
1.只要传入的内容一样,得到的值一定一样 ----> 要用明文传输密码文件完整性校验(下载文件时的安全措施)
2.不能由hash值反解出传入的内容 ----> 把密码做成hash值,不应该在网络传输明文密码
3.只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的

Hash有什么用呢?

转为密文密码

我们在使用客户端时注册一个账号,向服务端发送了自己的密码,我们大家知道,抓包也就是截取这些包含用户密码的信息是十分容易的,故如果不对密码进行加密,我们在使用服务时便基本毫无安全性可言

Hash可以在一定程度上帮助我们解决这一类烦恼,它首先是一类数学算法,选取其中的一种将我们的明文密码转为Hash值,对其进行加密即转为密文密码,其最大的适用点是其是不能被反解的(虽然现在有很多反解的工具、网站,如md5算法,做到这一数学突破的似乎是我国山东大学一位数学性的教授~)

用于文件校验

服务端在向客户端传文件时,可以使用hash算法得到一个hash值,客户端收到文件时会用其相应的算法得到的hash值进行比对,用于判断文件的完整性或是否被修改过

Hash 构造方法与算法过程

  • 直接定址方法

    • 公式一:hash(key) = key
    • 公式二:hash(key) = a*key+b
    • 我们可以查看到直接定址方法具有线性的特点,因此适用在关键字分布连续的情况
  • 数学分析方法

    • 方式:提取关键字中随机性好的数字位,将其拼接为哈希地址
    • 适用场景:关键字已知的情况下,对关键字中每一位进行取值情况分析
  • 除留余数方法

    • 公式:hash(key) = key % p
    • 除数采用取余模运算
  • 算法过程:

    • hash 函数接收到输入的字符串,首先会先进行预处理-哈希计算-输入摘要
    • 预处理:将字符串进行填充、分割N块,为hash进行初始化
    • 哈希计算:将预处理的数据完成指定算法生成消息摘要
    • 每指定一种hash算法只会生成固定长度的摘要,长度越长的安全性越高

转自:
作者Id:盆友圈的小可爱

hashlib模块的使用

Python当中有一个可以让我们很轻松的使用hash诸多算法对信息进行加密的模块:hashlib

hashlib模块
import hashlib
obj = hashlib.md5()         # 相当于得到一个md5算法的加工厂,也可以直接传值  常见的有md5、rsa算法
obj.update('hello'.encode('utf-8'))     # 向加工厂传数据,注意只能传入byte类型的数据
obj.update('world'.encode('utf-8'))
# updata()方法是可以直接进行字符串拼接的,故推荐在读文件时使用for循环一行一行的读,以此防止内存溢出
res = obj.hexdigest()           # 产品出厂
print(res)

不过,在要检验的hash值过大时,如果使用for循环去读每一行的话,会花费很多时间,这种情况可以选择去校验hash值的随机的每一段,用f.seek()方法选取几个点进行校验,类似随机抽样,介绍时间与内存成本的同时又可以大概率的确定文件的完整性与正确性

模拟撞库

通过hash算法生成的hash值对密码进行加密仅是一种防御手段,这里我们探讨一下如何破解hash值加密后的密码

爆破解法(撞库):将猜到的用户可能设置的密码通过已截取或已知的客户端加密的hash算法得到的密文与截获的密文进行不断比对

代码简单实现

import hashlibcatch_code = 'asdqf4658716qwf984651fasf4654afs'         # 抓包获取的hash值
password = [                                # 猜的可能撞上的密码'1234','a123','123456','acsccsc'
]
def make_code_dic(password, catch_code):        # 制作密码字典dic = {}for p in password:res = hashlib.md5(p.encode('utf-8'))dic[p] = res.hexdigest()       # 字典中键是明文密码,值是hash值for k, v in dic.items():if v == catch_code:print(f'撞库成功,明文密码是{k}')     # 如果字典中的值对上了即得到了明文密码

提升撞库的成本:密码加盐

树立良好价值观,保障信息安全,那如果有些人真的不计机器成本和时间成本,把一个大用户的密码的密文给解惑了,用十几台机器在每日每夜的撞库,咋办咧?
结果是:如果真没日没夜的撞,迟早会撞上的,这似乎避免不了,但可以加重破解的成本,毕竟坚持才是胜利,说不定一些不坚定的不法分子破了几个月后心态出问题了,知难而退
加重撞库的成本,可以为密码加加盐

密码加盐:在密码中随机地加入一些无用的、耐人寻味的字节,但将加入的位置与加入的内容转给需要进行合法通信的双方以正常解密,但对截获信息者就需要花更多的时间解密了

代码简单实现

import hashlib
# 密码是steak0107
obj = hashlib.md5()
obj.update('我是盐'.encode('utf-8'))    # 加入混淆信息
obj.update('steak'.encode('utf-8'))
obj.update('我也是盐'.encode('utf-8'))
obj.update('0107'.encode('utf-8'))
print(obj.hexdigest())               # 这样得到的密文就加密程度更高了

希望该文章能对您有所帮助,文章所涉及如有不正之处,望各位不吝指正赐教!

Hash的简介与hashlib模块的使用、模拟撞库与密码加盐相关推荐

  1. 使用python hashlib模块给明文字符串加密,以及如何撞库破解密码

    文章目录: 1 hashlib介绍 2 hashlib模块使用 2.1 查看hashlib中有哪些hash算法 2.2 对字符串进行加密 2.3 对于数据比较大,加密可以分块,结果一样 2.4 has ...

  2. PHP密码加盐Hash

    加盐Hash: $salt=base64_encode(mcrypt_create_iv(32,MCRYPT_DEV_RANDOM)); $password=sha1($register_passwo ...

  3. hashlib 模块用来进行hash

    hashlib的基本概述: python中的 hashlib 模块用来进行hash 或者md5加密,而且这种加密是不可逆的,所以这种算法又被称为摘要算法, 其支持Opennssl库提供的所有算法,包括 ...

  4. Python模块学习——hashlib模块讲解

    一:hashlib简介 1.什么叫hash: hash是一种算法(不同的hash算法只是复杂度不一样)(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SH ...

  5. addsectionpic.java_python基础21——json/piclkle模块configparser模块hashlib模块subprocess模块...

    json与pickle模块 1.什么是序列化&反序列化 内存中的数据类型---->序列化---->特定的格式(json格式或者pickle格式) 内存中的数据类型 土办法: {'a ...

  6. Python——hashlib模块(MD5校验)

    摘要 主要是在python中使用MD5对下载后的文件是否完整进行校验. hashlib的基本概念 hash是一种算法,不同hash算法只是复杂度不一样.在python 3.x里代替了md5模块和sha ...

  7. python3-哈希:hashlib模块

    系列文章目录 文章目录 系列文章目录 一.哈希(hash)的概念 二.hashlib模块 三.密码加盐 一.哈希(hash)的概念 哈希的概念: 哈希也叫散列.杂凑,它是一类算法的统称,可以将输入的数 ...

  8. hashlib模块,md5加密

    import hashlib #字符串加密 # s = '12345'+'352627d' #后面的是加盐,只有自己知道 # # m = hashlib.md5(s.encode())#s.encod ...

  9. hashlib模块使用详情

    python常用模块目录 一:hashlib简介 1.什么叫hash:hash是一种算法(不同的hash算法只是复杂度不一样)(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224 ...

最新文章

  1. 笔记:Hadoop权威指南 第4章 Hadoop I/O
  2. 教表弟用Python写了个“飞机大战”游戏!表弟:可以拜你为师吗?
  3. FioriLaunchpad.html的三个round-trip
  4. SAP CRM Business transaction save mode
  5. Project Pacific的第一次接触(转)
  6. http后面的双斜杠被转义_【实用干货】双荧光素酶报告基因检测
  7. Mysql索引失效的几种情况总结
  8. iOS开发值苹果手机各种尺寸详细表以及iPhoneX、iPhoneXS、iPhoneXR、iPhoneXSMax屏幕适配
  9. 使用 Anaconda 安装 Pytorch
  10. SD卡格式化重建分区
  11. 分享微云普通用户不限速下载方法
  12. 各个城市对应的code码
  13. word转pdf加水印以及替换内容
  14. 代价函数,损失函数,目标函数区别
  15. 微信小程序相关一、模仿京东静态登录页面
  16. 超声波测距仪编程_Micropython教程之TPYBoard DIY超声波测距仪实例演示
  17. 获取联系人的电话号码
  18. (项目)在线教育平台(九)
  19. 全球KYC服务商ADVANCE.AI顺利加入深跨协 推动跨境电商行业有序发展
  20. 计算机可视化视景仿真,计算与仿真、三维设计、图像处理、视景仿真、4k视频剪辑工作站介绍2015版.pptx...

热门文章

  1. 如何装计算机网络驱动,如何安装驱动 电脑驱动的几种安装方法
  2. C/c++中内存拷贝函数memcpy详解
  3. python解码报错,gbk和utf-8都不行了
  4. gettimeofday() 和 clock_gettime()函数 分析小结
  5. chrome插件莫名消失【已解决】
  6. 23电工杯数学建模A题
  7. 二叉树遍历【递归非递归】
  8. C#iText7对PDF进行签章
  9. A040_SpringMVC进阶_JSON
  10. 【Linux】SOCKET编程