文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python中hash加密简介及使用方法

2024-04-02 19:55

关注

简介

概念

散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件

Hash简单点讲就是把任意一段数据经过某种算法生成一段唯一的固定长度的数据

也可以把哈希值当做是文件指纹,因为它是文件唯一性的标志,与每一个字节都有关,当文件发生改变是,指纹值也会改变

  1. 如果把hash算法比喻为一座工厂
  2. 那传给hash算法的内容就是原材料
  3. 生成的hash值就是生产出的产品

特点

只要传入的内容一样,得到的hash值必然一样

hash有哪些

常见 Hash 算法有 MD5 和 SHA 系列,目前 MD5 和 SHA1 已经被破解,一般推荐至少使用 SHA2-256 算法

哈希算法输出长度(bit)输出长度(字节)
MD5128 bit16 bytes
RipeMD160160 bits20 bytes
SHA-1160 bits20 bytes
SHA-256256 bits32 bytes
SHA-512512 bits64 bytes

算法碰撞

稍微想一下就可以发现,既然输入数据长度不固定,而输出的哈希值却是固定长度的,这意味着哈希值是一个有限集合,而输入数据则可以是无穷多个,那么建立一对一关系明显是不现实的。所以“碰撞”是必然会发生的,所以一个成熟的哈希算法会有较好的抗冲突性,同时在实现哈希表的结构时也要考虑到哈希冲突的问题

当然,如果有三万台电脑同时破解,也还是一天 -_-|||。
不过道高一尺,魔高一丈。谁又会傻乎乎的一个站着打一个等着挨。都是相对的

所以密码尽量不要用纯数字,因为根本没有任何安全性

加盐防碰撞

对数字内容进行 Hash 运算,获取唯一的摘要值来指代原始完整的数字内容,利用 Hash 函数的抗碰撞性来确保内容未被篡改

常用于用户名和密码来确保用户信息安全,为了防止攻击会采用加盐的方法,就是原来的明文加上一个随机数之后的 Hash 值,Hash 值和盐会保存在两个地方,只要不是同时泄漏就很难被破解

加密

如果在Python中需要对用户输入的密码或者其他内容进行加密,首选的方法是生成hash值

在Python中可以利用二个模块来进行:

hashlib

主要方法

使用:hashlib.md5()

名称描述
md5(…)利用md5算法加密
sha1(…)利用sha1算法加密
sha224(…)利用sha224算法加密
sha256(…)利用sha256算法加密
sha384(…)利用sha384算法加密
sha512(…)利用sha512算法加密

特有方法

如果你利用hashlib生成了一个Hash对象,那么这个Hash对象会包含如下方法

名称描述
update(arg)可以重复利用指定了特殊加密算法的Hash对象,对arg进行加密
digest(…)以字符形式返回加密内容
hexdigest(…)以16进制形式返回加密内容
copy(…)为了达到重复利用Hash对象的目的,而克隆Hash对象

使用方法

直接使用hashlib方法

import hashlib
 
hashlib.sha224("Nobody inspects the spammish repetition".encode("utf-8"))  # 加密
hashlib.sha224("Nobody inspects the spammish repetition".encode("utf-8")).hexdigest()  # 返回加密内容

直接使用Hash对象中的方法

import hashlib
 
# 造出工厂
m = hashlib.md5()
# 放入原料
m.update("Nobody inspects".encode('utf-8'))
# 产出hash值
m.digest()
 
m.update("the spammish repetition".encode("utf-8"))
m.digest()
m.hexdigest()

加盐

import hashlib
 
# 造出工厂
m = hashlib.md5("this is salt".encode("utf-8"))
# 放入原料
m.update("Nobody inspects".encode('utf-8'))
# 产出hash值
m.digest()
 
m.update("the spammish repetition".encode("utf-8"))
m.digest()
m.hexdigest()

crypt

主要方法

名称类型描述
crypt(…)方法对指定内容进行hash加密
mksalt(…)方法根据加密算法生成salt
methodslist返回可用加密算法的列表
MOTHOD_CRYPT常量加密算法
METHOD_MD5常量md5加密算法
METHOD_SHA256常量sha256加密算法
METHOD_SHA512常量sha512加密算法

使用说明

使用crypt.crypt(…)进行hash加密的时候,需要提供二个参数:

import crypt
 
salt = crypt.mksalt(crypt.METHOD_SHA512)
hash = crypt.crypt("helloworld",salt)

应用

密码加密

m=hashlib.md5()
 
m.update('key'.encode('utf-8'))      #添加个其他元素,提升密码复杂度,不是加盐
m.update(password.encode('utf-8'))
print(m.hexdigest()) 

应用一致性校验

m = hashlib.md5()
with open(r'E:\01.mp4','rb') as f:
    for line in f:  
        m.update(line)
        
print(m.hexdigest)

到此这篇关于Python中hash加密的文章就介绍到这了,更多相关Python hash加密内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯