首页 > 其他分享 >内置模块之hashlib模块--加密功能

内置模块之hashlib模块--加密功能

时间:2022-10-27 17:02:26浏览次数:45  
标签:hashlib 加密 -- 明文 模块 密文 encode hasher

hashlib模块

hashlib铺垫知识

hash指加密,我们将一串字符串明文加密为密文,使这段密文难以被识别,也无法倒推成明文,这就是加密。

hashlib模块所提供的加密,如我们最常用的md5加密方式,其加密效果就是:传入相同的一段明文,加密后会输出相同的一段密文。

应用场景

而加密常用于密码校验等领域。当我们的密码通过网络传输时,可能会被截取,暴露我们的用户名密码,这十分的不安全,而在密码通过网络传输前,如果将密码的明文加密为密文,这样即使我们的密码密文被截取,也不会造成我们的信息泄露。

也可以用于文件安全性检测,文件一致性检测等,这个在下文中会提及其实现的原理。

常见的加密算法

常见的加密算法有:md5、base64、hmac、sha系列

hashlib模块的使用

基础用法

import hashlib  

# 1.得到一个加密器,采取md5的策略加密
hasher = hashlib.md5()
# 2.给加密器 传入明文
hasher.update('我是一串明文字符串'.encode('utf8'))  # 明文必须编码成二进制才能被加密
# 3.从加密器 获取密文
cipher = hasher.hexdigest()
print(cipher)  # 3d6c18389bc1433e6f1c9ef80d3bceac

这样就成功将一段明文加密成了一段密文。

补充说明

md5具体执行什么算法,我们无从得知,我们只需要掌握:

  • 同样的明文被加密后得到的密文是一样的
  • 我们无法通过密文得到对应的明文
  • md5策略拿到的所有密文长度是固定的
hasher = hashlib.md5()
# 我们不仅可以一次性传入明文  hasher.update('我是一串明文字符串'.encode('utf8'))
# 也可以分段传入明文
hasher.update('我是一串'.encode('utf8'))
hasher.update('明文'.encode('utf8'))
hasher.update('字符串'.encode('utf8'))
cipher2 = hasher.hexdigest()
print(cipher2)  # 3d6c18389bc1433e6f1c9ef80d3bceac  与上文中的密文比较别无二致

加盐处理

虽然我们无法通过密文反解明文,但是由于明文只对应一种密文,所以我们可以通过猜很多明文的方式,得到一个明文和密文的对照表,这样一些常见的明文组合就可能被对照表破解出来,这种行为叫做撞库。

所以我们可以选择在明文中添加一些干扰项,来加大撞库的难度,这种方式又被叫做加盐。

import hashlib

hasher = hashlib.md5()

hasher.update('前面加一勺盐'.encode('utf8'))  # 前面拼接了一段内容
hasher.update('明文密码'.encode('utf8'))
hasher.update('后面再加一勺盐'.encode('utf8'))  # 后面也拼接了一段内容

cipher = hasher.hexdigest()

应用在密码校验时,密码明文夹杂干扰项被翻译成密文存储在服务器的库中,当用户输入密码时,程序会添加相同的干扰项,加密成同样的密文用于校验。

对于想要撞库的人来说,不仅要撞出明文,还要猜测哪部分是盐分。

如果还想更加安全,则可以采取动态加盐的方式。

import hashlib
username = input('username>>:').strip()
password = input('password>>:').strip()

hasher = hashlib.md5()

hasher.update(username[::3].encode('utf8'))  # 取用户名的一部分做盐分
hasher.update(password.encode('utf8'))  # 密码


cipher = hasher.hexdigest()
print(cipher)

文件安全性\一致性检测

当我们通过网络传输(上传/下载)文件时,文件可能会被添油加醋,一时间无法辨认,如我们下载的软件安装包里被植入木马什么的。

这时我们在传输文件时,先传文件通过加密得到的一小段密文过去,然后文件传输完成后,再次对文件加密得到一段新的密文,这段密文如果与先前传的一致,说明这个文件没有被篡改。

当然如果是比较大的文件,我们对其进行加密,可能会消耗比较多的资源。这时可以取文件的某些部位进行分段加密校验即可,如头尾,中间段各取100个字节进行加密即可,这种策略可以显著提升文件一致性检测的效率。

标签:hashlib,加密,--,明文,模块,密文,encode,hasher
From: https://www.cnblogs.com/Leethon-lizhilog/p/16832850.html

相关文章

  • Redis 缓存数据库一致性手撕面答
    引言自Redis入门篇过后,已经好久没更Redis了,接下来应该从实战篇,原理篇,面试篇几个层次来展开,本篇主要是实战篇中的数据库缓存一致性问题,以问题形式展开,应对面试场景作答【melo......
  • Daemontools的使用( Linux守护进程管理)
    前言Daemontools是一个在linux上可以进行守护进程管理的工具,当我们有一些程序需要常驻后台,万一不小心挂掉了他可以帮我们重启服务.这是他的官网,很简陋但是很有用安装......
  • 手写 Java HashMap 核心源码
    手写JavaHashMap核心源码手写JavaHashMap核心源码上一章手写LinkedList核心源码,本章我们来手写JavaHashMap的核心源码。我们来先了解一下HashMap的原理。H......
  • 全都有
    79.单词搜索搜索啦,模板啦;条件判断,函数本身;还有回溯勿忘;if(k==word.length())returntrue;if(i<0||j<0||i>=board.length||j>=board[0].length||......
  • 【RocketMQ入门到精通】— RocketMQ初级特性能力 | Message Filter消息过滤,可不是web
    名言警句任何先进的技术均与魔法无异追本溯源【​​经历了6个月的失踪,我将带着干货终究归来!【RocketMQ入门到精通】​​】什么是消息过滤MessageFilter,可不是web容器的过滤......
  • 「老男孩Linux」0基础转行,大专学历,工资轻松翻3倍!
    对于职场人来说,转行越来越日常化了,受疫情影响,各行各业多多少少都有些不景气,有的人选择打破现状,有的人则选择稳步求进。对于职场年轻人来说,他们有条件通过更多尝试来找到自......
  • Go 云原生实战:如何增加 Web 应用配置模块
    1介绍当我们为自己编写程序时,通常会将一些重要的配置项直接写在源代码里,比如:服务器监听的端口、数据库使用的名称和端口号、HTTP请求超时的持续时间...但是,如果我们尝试将......
  • 【js】元素是否在可视区范围内
    公式:元素到顶部距离(最近的具有定位父级元素)- 滚动条高度 <=可视区的高度  offsetTop、scrollTop  <!DOCTYPEhtml><htmllang="en"><head><me......
  • 从阿里规约看Spring事务
    目标:事务失效引发的灾难H4如下图(张三--->李四转账)tips下订单-------订单支付-----减库存(失败)超卖现象代码回忆://实现类publicclassUserServiceImplimplements......
  • Hibernate,JPA 对象关系映射之关联关系映射策略
    关联关系映射关联关系映射,是映射关系中比较复杂的一种映射关系,总的说来有一对一、一对多和多对多几种关系。细分起来他们又有单向和双向之分。下面我们逐一介绍一下。单向O......