python内建模块---hashlib

解释实现哈希值作为唯一的ID以及后面的hexdigest是什么意思 这段代码使用MD5哈希算法生成文档内容的唯一标识。首先将文档内容编码为UTF-8字节序列,然后通过hashlib.md5()计算MD5哈希值,最后用hexdigest()转换为十六进制字符串作为ID。这样即使文档内容微小变化,也会产生完全不同的哈希值,确保ID的唯一性。hexdigest()使二进制哈希结果转为可读的十六进制格式,便于存储和比较。 阅读详情
  • python的hashlib提供了常见的摘要算法如MD5,SHA1等。
  • 摘要算法又称哈希算法、散列算法。 它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)
  • 摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest。目的是为了发现原始数据是否被篡改过。
  • 摘要算法之所以能指出数据是否被篡改过,是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。 而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。
  • 例1. 以常用的摘要算法MD5为例,计算一个字符串的MD5
  • import hashlib
    
    md5 = hashlib.md5()
    md5.update('hewuxin is a very good student'.encode('utf-8'))
    
    print(md2.hexdigest())
    
    #如果数据量很大,可以分开来写
    
    
    md5 = hashlib.md5()
    md5.update('hewuxin is a very'.encode('utf-8'))
    md5.update('good student'.encode('utf-8'))
    
    print(md2.hexdigest())
    
    #输出结果为
    7888d1fd0f3a4d6f929431076606139b

     

  • 如果改动一个字符,计算结果就会完全不同。
  • MD5是最常见的摘要算法,速度很快,生成结果为固定的128bit字节 ,通常用一个32为的16进制字符串表示。
  • 另外一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似:
  • import hashlib
    
    sha1 = hashlib.sha1()
    sha1.update('hewuxin is a good student'.encode('utf-8'))
    
    print(sha1.hexdigest())
    
    #输出结果为
    4be67298fdde24e05c325bf2f99fe68f630ab656

    同样如果数据量很大,可以分开来写

  • SHA1的结果是160bit字节,通常用一个40为的16进制字符串表示
  • 比SHA1更安全的算法是SHA256和SHA512,但是越安全的算法越慢,而且摘要长度更长。由于
  • 因为任何摘要算法都是把无限多的数据集合映射到一个有限的集合中,所以完全有可能出现两个不同的数据通过某个摘要算法得到相同的摘要结果 ,这种情况成为碰撞。 出现碰撞的几率非常非常小。
  • 摘要算法应用 有 允许用户登录的网站中用户密码的加密
  • 当用户登录时,首先计算用户输入的明文口令的MD5,然后和存储在数据库中的MD5对比,如果一致,则登录成功。
  • 设计一个验证用户登录的函数,根据用户输入的口令是否正确,返回True或False
  • import hashlib
    
    UserDict = {
    'hewuxin': '319622121d9ae418930f9f581b886ac5',
    'wuxin':'d0518e9c0c8c8cbae2b1220df62c8674'
    }
    
    def login(username,password):
        pw = hashlib.md5()
        pw.update(password.encode('utf-8'))
        return pw.hexdigest() == UserDict[username]
    
    login('hewuxin,'123618')
    
    #输出结果为:
    True

     

  • 其实采用MD5存储口令也不安全 ,因为可以使用存储MD5口令的数据库反推出明文口令。
  • 要确保存储的口令不被反推出来可以使用对原始口令追加一个复杂字符串来实现,俗称”加盐“
  • import hashlib,random
    
    ud = {}
    
    def get_md5(s): # return s的md5编码
    	return hashlib.md5(s.encode("utf-8")).hexdigest()
    
    class User(object):  #定义User类
    	def __init__(self, username, password):  #初始化
    		self.username = username
    		self.salt = ''.join([chr(random.randint(48,122)) for i in range(10)])  #随机生成salt:循环20次每次在(48,122)之间取随机数转换为字符
    		self.password = get_md5(password + self.salt) #生成加盐后的md5 password
    
    ud = {
    	'bob': User('bob', 'abc999'),
    	'alice': User('wuxin', 'alice2008'),
    	'heyuyang': User('hewuxin', '123618')
    	}
    
    def login(username,password):
    	user = ud[username]
    	return user.password == get_md5(password + user.salt)
    print(login('hewuxin','123618'))
    
    #返回结果
    True
    

    摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改,但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令.

 

 

CCS环境下ADC采样波形的实时可视化调试技巧 本文详细介绍了在CCS环境下实现ADC采样波形实时可视化的调试技巧。通过数组缓存优化、多通道同步显示和波形测量工具的高级用法,帮助开发者高效调试嵌入式系统中的ADC采样问题,提升信号分析的准确性和效率。 阅读详情

相关推荐

从零开始学 PyTorch 7天路线图(完整可运行代码版)

本文提供了5天PyTorch入门教程的完整代码,涵盖从基础到实战的核心内容。Day1测试环境并介绍张量基础;Day2讲解常用张量操作;Day3演示自动求导机制;Day4实现完整线性回归模型;Day5构建MNIST手写数字识别全连接网络。所有代码可直接运行,包含GPU检测、梯度计算、模型训练和可视化等关键环节,帮助新手快速掌握PyTorch核心概念和典型应用场景。

IT老农民的博客 271

Python3中digest()和hexdigest()的区别

一、介绍 Python3中可以使用 hashlib库 实现加密,hashlib提供了多个不同的加密算法接口,如SHA1、SHA224、SHA256、SHA384、SHA512、MD5等 二、digest()与hexdigest()区别 hash.digest() :返回摘要,作为二进制数据字符串值 hash.hexdigest():返回摘要,作为十六进制数据字符串值 import hashlib md5 = hashlib.md5() md5.update("a".encode('utf-8')) i

sinat_34241861的博客 1万+

职位层次对应表.doc

职位层次对应表.doc

python3中digest()和hexdigest()区别

python3中digest()和hexdigest()区别 hashlib是涉及安全散列和消息摘要,提供多个不同的加密算法接口,如SHA1、SHA224、SHA256、SHA384、SHA512、MD5等。 其中 hash.digest() 返回摘要,作为二进制数据字符串值 hash.hexdigest() 返回摘要,作为十六进制数据字符串值 举个例子 import ha...

猫咪控丶的博客 2万+

常见几种加密算法的Python实现

生活中我们经常会遇到一些加密算法,今天我们就聊聊这些加密算法的Python实现。部分常用的加密方法基本都有对应的Python库,基本不再需要我们用代码实现具体算法。MD5加密全称:MD5...

tongtongjing1765的博客 7658

SHA1加密

private static String getSHA1(String contentStr) { String result = ""; try { MessageDigest digest = MessageDigest.getInstance("SHA-1"); digest.update(conte...

飘云羽逸 462

sha1 算法

import hashlib sha1 = hashlib.sha1() t = '1567915904' data = "Xr0Z-javascript-obfuscation-1" + t sha1.update(data.encode('utf-8')) sha1_data = sha1.hexdigest() print(sha1_data)

木下瞳的博客 1233

Python 内建模块 ——hashlib摘要算法

Pythonhashlib提供了常见的摘要算法,如MD5、SHA1等等摘要算法又称哈希算法、三列算法。他通过一个函数,把任意长度的数据转换为一个长度固定的而数据串(通常用16禁止的字符串表示)可以通过md5值的不同来发现别人是否篡改了你的文章import hashlib nmd5 = hashlib.md5('how to use mad5 in python hashlib'.encode(('...

web_9705的博客 489

Python入门】常用内建模块hashlib

学习python的第7天 摘要算法简介 Pythonhashlib提供了常见的摘要算法,如MD5,SHA1等等。 什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。 举个例子,你写了一篇文章,内容是一个字符串'how to use python hashlib - by Michael',并附上这篇...

Zeke_Leeeee的博客 245

Python常用内建模块hashlib

hashlib模块提供了常见的摘要算法,MD5,SHA1还有很多,对于什么是摘要算法,详细的请查阅维基百科。 其实摘要算法很好理解,它通过一个函数把任意长度的数据转换成长度固定的数据串。 好了,解释完摘要算法。我解释一下什么是MD5(Message Digest Algorithm MD5),这是一种散列函数,具体实现方式不管它,有兴趣可以查阅相关资料。这种函数可以把数据转换成固定长度。 知

embedclub_LYF的专栏 1091

Python常用内建模块——hashlib

哈希早在大一下学python课程就有所领略,当时被动的接收让我觉得挺难的。但今天静下来学了廖老师的课程之后发现并不难,甚至可以说非常公式化。首先,hashlib模块实现了多种安全哈希算法的通用接口,包括 MD5、SHA 系列(SHA1、SHA224、SHA256、SHA384、SHA512)、SHA3 系列以及 BLAKE2,而我们常用的一般就是​:所有哈希算法对象都共享相同的方法(如update()digest()),调用方式标准化。​:哈希值无法还原出原始数据,常用于加密验证。​。

Derrick__1的博客 872

python常用内建模块hashlib

hashlibPython 的一个内建模块,用于提供常见的消息摘要算法(也称为哈希算法)。这些算法可以用于确保数据完整性、进行密码存储(通过加盐处理)等。hashlib支持多种哈希算法,包括 MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512 等。以下是一些使用hashlib

2301_78045723的博客 711

python hexdigest_python – 将hexdigest()的结果与字符串进行比较

我有一个生成的MD5哈希,我想将其与字符串中的另一个MD5哈希进行比较.下面的陈述是错误的,即使它们在打印时看起来一样,应该是真的.hashlib.md5("foo").hexdigest() == "acbd18db4cc2f85cedef654fccc4a4d8"谷歌告诉我,我应该从hexdigest()编码结果,因为它不会返回一个字符串.但是,下面的代码似乎也不起作用.hashlib.md5...

weixin_39956182的博客 1401

python hexdigest,python3中digest()和hexdigest()区别

python3中digest()和hexdigest()区别hashlib是涉及安全散列和消息摘要,提供多个不同的加密算法接口,如SHA1、SHA224、SHA256、SHA384、SHA512、MD5等。其中hash.digest()返回摘要,作为二进制数据字符串值hash.hexdigest()返回摘要,作为十六进制数据字符串值举个例子import hashlibmd5 = hashlib.m...

weixin_36277530的博客 818

python中将hexdigest函数返回的值变成digest函数返回的值

hexdigest实际上返回的是16进制的str形式,digest返回的是bytes,用人眼看起来相等。 例如: h = hashlib.new(‘ripemd160’) h.update(b’12345’) h.hexdigest() ‘e9cbd2ea8015a084ce9cf83a3c65b51f8fa10a39’ ...

DerekRay的博客 5002

python hexdigest_Pythonhashlib.sha256(x.hexdigest()是否等同于Rs digest(x,algo=“sha256”)...

是的,Python和R示例代码都返回传入数据的SHA256哈希摘要的十六进制表示。您确实需要关闭R中的序列化,否则digest()包首先创建字符串的序列化,而不是仅计算字符数据的哈希;将serialize设置为FALSE:> digest('', algo="sha256", serialize=FALSE)[1] "e3b0c44298fc1c149afbf4c8996fb92427ae4...

weixin_39670627的博客 1189

python的md5和sha1加密

首先介绍一下MD5和SHA1 MD5 MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)。128位长度。目前MD5是一种不可逆算法。 具有很高的安全性。它对应任何字符串都可以加密成一段唯一的固定长度的代码。 SHA1 SHA1的全称是Secure Hash Algorithm(安全哈希算法) 。SHA1基于MD5,加密后的数据长度...

aiyi2350的博客 701

Python加密——sha1加密

为什么80%的码农都做不了架构师?>>> ...

weixin_33798152的博客 949

python sha1加密算法

【代码】python sha1加密算法。

Cesare的博客 277

Python——md5加密

Python中的md5加密简介md5()方法的使用英文类型中文类型 简介 在Python3的标准库中,已移除了md5,关于hash加密算法都放在hashlib这个标准库中,如SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法等。 官方文档的介绍,请点击 md5()方法的使用 英文类型 update(arg)传入arg对象来更新hash的对象。必须注意的是,该方法只接...

chl183的博客 449
下一篇: python常用内建模块6 hmac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值