首页 > 编程知识 正文

python crypto模块详解,Python加密解密

时间:2023-05-06 11:07:36 阅读:23976 作者:475

文章目录一、哈希lib简介二、哈希lib使用1、常用属性2、常用方法3、使用实例3、哈希lib特点四、代码实操1、实例2、应用场景案例

一、哈苏丽芙介绍

混列lib是提供一些常见的混列(摘要)算法的Python标准库,其中包括md5、sha1、sha224、sha256、sha384、sha512等算法

摘要算法是什么? 摘要算法又称mgdls算法、散列算法。 使用函数将任意长度的数据转换为固定长度的数据串(通常用十六进制字符串表示)。 有关详细信息,请参阅hashlib —安全的mgdls和消息概述

二、混列使用本文以混列中的MD5算法为例,其他sha224、sha256算法的使用方法与MD5基本一致。 想看其他案例的话请参考我的博文。 在python上实现MD5、sha256、sha384、sha512和base64加密

1、常用属性hashlib.algorithms#列出所有加密算法h.digest_size#生成的哈希字节的大小。 h.block_sizemgdls内部块大小2,创建一个hash对象以指定常规方法hash.new([arg] )加密模式。 hash.update )用字符串参数更新#mgdls对象。 如果同一hash对象重复调用方法,则返回m.update(a; m.update(b(b )等效于m.update(b(b ) hash.digest ) #将摘要作为二进制数据字符串值返回。 返回hash.hexdigest(#摘要,hash.copy(#副本3,使用示例# MD5的importhashlibdefJM_MD5 ) password ) 3360 m=hash MD5对象m.update的构造(password.encode ) encoding='utf-8 ' ) )设置编码格式并将字符串添加到MD5对象的password_md5=m.# hexdigest ) )将hexdigest加密字符串生成十六进制数据字符串值return password,password_MD5g=JM_MD5('123456 ' ) print(g ) g )三,hash

2、注意摘要算法不是加密算法,不能用于加密(因为摘要不能反向推送明文),只能用于防篡改。

3、其单向计算特性决定了可以在不保存明文密码的情况下验证用户密码。

一个优秀的 hash 算法,将能实现:

浏览博客

正向快速:给出明文和散列算法,可以在有限时间和有限资源内计算散列值。

反向困难:给定(一些) hash值,在有限的时间内很难反向推出明文(几乎不可能)。

输入敏感:原始输入信息修改了一点信息,生成的散列值看起来都很不一样。

避免冲突:难以找到两个内容不同的明文,它们的混列值一致(冲突)。 也就是说,对于任意两个不同的数据块,其混列值相同的可能性非常低; 对于特定的数据块,找到与其哈希值相同的数据块非常困难。

四、代码实操可以看我的其他篇博文。 在python上实现MD5、sha256、sha384、sha512和base64加密

1、举例来说,import hashlib#一、加密字符串m1=hash lib.MD5 (' hello python '.encode (encoding=' utf-8 ' ) )直接插入构建对象e 53024684 c9be1 DD 3f 6114 EC c8 bb dddc # 2,使用update方法将字符串参数M2=hashlib.MD5(# )添加到MD5对象m2.update (hello python password_md5=m2.hexdigest () print (m2.hex digest ) ) #结果为e 53024684 c9be1 DD 3f 6114 EC c8 bb dddc # 3, 数据量太大时示例: m3=hashlib.MD5(m3.update ) hello'.encode ) (utf-8 ) )注意:块在空间上也是m3.update ) python'.encode MD5是最常见的摘要算法,它是快速的,生成结果是固定的128位字节,通常用32位十六进制字符串表示。 三种方案将参数传递给结构化MD5对象,如果传递的字符串匹配,则最终生成的结果相同。

这表明hash算法就像工厂一样。 工厂可以用你送来的原材料(m.update )把原材料运到工厂),加工回来的产品是hash值。 这也是摘要算法的

一个特点,它不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改。

2、应用场景案例

hashlib模块主要应用于,用户账号密码登录,对明文密码进行加密等

import hashlibUSER_LIST = []def pwd_Md5(password): password = password+'hello python' # 字符串混淆加盐,可以设置更复杂一点 return hashlib.md5(password.encode("utf-8")).hexdigest()def register(): print('**************用户注册**************') while True: user = input('请输入用户名:') if user.isalpha(): break while True: password1 = input('请输入密码>>>:').strip() passwprd2 = input('请重复密码>>>:').strip() if password1 == passwprd2: password = pwd_Md5(password1) # 将密码进行Md5加密 break else: print('密码不正确,重新输入!') temp = {'username':user,'password':password} USER_LIST.append(temp)def login(): print('**************用户登陆**************') user = input('请输入用户名:') pwd = input('请输入密码:') for item in USER_LIST: if item['username'] == user and item['password'] == pwd_Md5(pwd): return Trueif __name__=='__main__': register() if login(): print('登陆成功') else: print('登陆失败')结果:**************用户注册**************请输入用户名:wuhan请输入密码:123456**************用户登陆**************请输入用户名:小马过河请输入密码:123456登陆成功

代码分析:
1、用户登录需要使用密码,密码一定要加密,保证用户的信息安全。
  1)加密可以使用hashlib模块进行加密。
  2)加密可以写成加密函数,方便多处调用
  3)提高密码解密的复杂性,代码中多加字符串。(加密算法虽然依然非常厉害,但是也存在缺陷,即:通过撞库可以反解。所以,有必要对加密密码进行加盐。)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。