首页 > 编程语言 >python基础:hashilib加密模块

python基础:hashilib加密模块

时间:2022-10-27 18:58:53浏览次数:37  
标签:hashlib 加密 python hashilib 明文 密文 hash md5

目录

hashilib加密模块

hashlib 是一个提供了一些流行的hash(摘要)算法的Python标准库。其中所包括的算法有 md5, sha1, sha224, sha256, sha384, sha512等

什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)

1 加密的含义简介

​ 1.何为加密?

​ 将明文数据处理成密文数据,让人无法看懂

​ 2.为什么加密?

​ 加密可以保证数据的安全,防止数据中途拦截泄漏

​ 3.如何判断数据是否是加密的?

​ 当一串字符串没有规律,中间包含无规律的字母、数字、符号

​ 4.密文的长短代表了什么

​ 密文越长表示使用的加密算法越复杂

​ 5.常见的加密算法有哪些?

​ md5、base64、hmac、sha系列

2 加密算法基本操作

1.选择加密算法

import hashlib  # 导入hashlib 加密模块
md5 = hashlib.md5()  # 选择加密语法为md5,构建md5对象

2.传入明文数据

md5.updata(b'hello')   # updata更新哈希对象以字符串参数
# 传入想要加密的明文,b''表示是二进制数据

"update属性的参数含义"
md5.undate('待加密的明文'.encode(encoding='utf8))

3.获取加密密文

res = md5.hexdigest()  # hexdigest返回摘要,作为十六进制数据字符串值
print(res)
# 通过 md5.hexdigest() md5中的hexdigest方法来获取加密的密文 

转换成二进制的三种方法

1 b''
2 str.encode()
3 bytes()

4*设定hashlib md5 加密函数

import hashlib


def hashlib_md5(password):
    m = hashlib.md5()  # 构建MD5对象
    m.update(password.encode(encoding='utf-8'))  # 设置编码格式 并将字符串添加到MD5对象中
    password_md5 = m.hexdigest()  # hexdigest()将加密字符串 生成十六进制数据字符串值
    return password, password_md5


res = hashlib_md5('123456')
print(res)  
--------------------
('123456', 'e10adc3949ba59abbe56e057f20f883e')

3 加密补充说明(hashlib的特点)

1.加密算法不变,如果传入的明文相同,加密后的密文相同

1.明文一次性输入
import hashlib
md5 = hashlib.md5()
md5.update(b'hello~world~python')
res = md5.hexdigest()
print(res)  # 393f30266b770278539d8fd96ff521c0

2.明文分次输入
md5.update(b'hello')
md5.update(b'~world')
md5.update(b'~python')
res = md5.hexdigest()
print(res)  # 393f30266b770278539d8fd96ff521c0

"""
由此可见,只要传入的明文完全相同,算法相同的情况下,输出的密文也会完全相同
"""

2.加密之后的结果是无法反解密的

hashlib 具有单向计算特性,无法通过密文反推明文,因此它可以在不存储明文口令的情况下验证用户口令

​ hashlib 具有单向计算特性,只能从明文到密文加密,不能从密文到明文解密

​ 所谓解密只是已经记录了很多常用的明文加密的结果

3.加盐处理和动态加盐

​ 1) 加盐处理

​ 在明文中增加一些干扰项,防止明文过于简单容易被猜测

import hashlib
md5 = hashlib.md5()
md5.updata(b'公司干扰项', encoding='utf8')  # 添加干扰项,防止明文过于简单
md5.update(b'hello~world~python')
res = md5.hexdigest()

# 动态加盐
    干扰项是随机变化的,防止干扰项被泄露后用户数据被反向匹配到
    ps:常用的一些动态干扰项---当前时间、用户名的部分字符...,将这些动态的字符也添加一起加密成密文,得到的结果更加安全,难以猜测结果
  1. 动态加盐

干扰项是随机变化的,防止干扰项被泄露后用户数据被反向匹配到(通过撞库可以反解)

​ ps:常用的一些动态干扰项---当前时间、用户名的部分字符...,将这些动态的字符也添加一起加密成密文,得到的结果更加安全,难以猜测结果

4 加密操作的用处

1.用户密码加密

2.文件安全性校验

3.文件内容一致性校验

​ 利用hashlib 具有单向计算的特性。

​ 在下载文件时,既下载文件本身的内容,也下载加密后的密文,通过下载后对文件进行加密处理。对比加密后的密文是否一致,如果密文一致则俩个文件内容相同,不一致则说明文件可能在下载过程中被恶意篡改。

4.大文件内容加密

​ 由于大文件数据量很大,不会全部加密,然后对比密文,这样效率大大降低。会通过截取部分内容加密的方法,对比加密部分,验证文件的内容是否一致。

​ 比如:将一个1000G的文件,截取其中的100个小部分。将这100个部分进行加密,在文件下载后对比这100个部分是否相同,如果有不同则说明文件在下载的时候被篡改了,文件就不安全了,即可提醒用户该文件可能被木马病毒感染了。

5 优秀hash算法的特性

​ 正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。

​ 逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。

​ 输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。

​ 冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

标签:hashlib,加密,python,hashilib,明文,密文,hash,md5
From: https://www.cnblogs.com/DuoDuosg/p/16833314.html

相关文章

  • python模块之日志模块
    logging日志模块1.如何理解日志 简单的理解为是记录行为举止的操作(历史史官)2.日志的级别 五种级别3.日志模块要求 代码无需掌握但是得会CV并稍作修改importlogg......
  • python基础:subprocess子进程模块
    子进程模块subprocess模块模拟操作系统,执行命令并获取结果subprocess模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。importsubproce......
  • python基础:logging日志模块
    目录logging日志模块1.如何理解日志2.日志的级别3日志的组成4日志配置字典logging日志模块1.如何理解日志​简单的理解为记录数据行为的文件。​......
  • Python基础22
    今日内容概要hashlib加密模块subprocess模块logging日志模块软件开发主要流程今日内容详细hashlib加密模块1.何为加密 将明文数据处理成密文数据让人无法看懂2......
  • day23hashlib加密模块
    hashlib加密模块subprocess模块logging日志模块软件开发主要流程ATM项目分析hashlib加密模块1.何为加密 将明文数据处理成密文数据让人无法看懂2.为什么加密 ......
  • python 生成器
    """Python当中的生成器""""""生成器表达式生成器当中三个方法:close,send,throw()Python3有一个内置函数next(),它通过调用其next()方法从迭代器中检索下一个......
  • hashlib加密模块,subprocess模块,logging日志模块
    目录hashlib加密模块,subprocess模块,logging日志模块今日内容概要今日内容详细hashlib加密模块加密补充说明subprocess模块logging日志模块日志的组成日志配置字典日志实战......
  • Python主题建模LDA模型、t-SNE 降维聚类、词云可视化文本挖掘新闻组数据集|附代码数据
    全文链接:tecdat.cn/?p=24376在这篇文章中,我们讨论了基于gensim包来可视化主题模型(LDA)的输出和结果的技术(点击文末“阅读原文”获取完整代码数据********)。介绍......
  • 内置模块之hashlib模块--加密功能
    hashlib模块hashlib铺垫知识hash指加密,我们将一串字符串明文加密为密文,使这段密文难以被识别,也无法倒推成明文,这就是加密。hashlib模块所提供的加密,如我们最常用的md5加......
  • hashlib加密模块,subprocess模块,logging日志模块
    hashlib加密模块1.何为加密 将明文数据处理成密文数据让人无法看懂2.为什么加密 保证数据的安全3.如何判断数据是否是加密的 一串没有规律的字符串(数字、字母、符......