Python之 加密模块
对称加密:就是加密、解密的方式是一样的,只要知道了加密用的key,就可以解密,加密速度比较快,适合大数据量的加密处理。
非对称加密:就是和对称加密的方式不一样,加密用公钥,解密用私钥,。rsa是非对称加密,非对称加密速度相对慢一点。
hashlib模块
- 加密方式以md5方式加密举例
- 是标准模块,直接导入即可
- 还有其他的加密方式,比如:.sha1()、.sha224()、.sha256()等,加密后的字符串长度更长,安全性更高
一、加密步骤
1、字符串先转成二进制类型
使用.encode()方法转成二进制类型
import hashlib password='123456' print(password.encode())#加密时只能传二进制类型,字符串不能直接加密,要先使用encode()转成二进制类型的才可以加密 #结果为:b'123456'
2、使用加密方法
使用.hexdigest()方法输出加密后内容
import hashlib password='123456' m=hashlib.md5(password.encode()) #先转成二进制,再加密 print(m.hexdigest()) #获取加密后的结果 #结果:e10adc3949ba59abbe56e057f20f883e
3、打印加密后的内容
使用dir()内置函数显示该变量的所有方法
由于该模块pycharm无法提供提示方法,即输入m“.”不出来方法,所以可以使用内置函数dir(),将所有方法打印出来。
#print(dir(m)) #由于这个加密模块pycharm提供不了提示方法,所以如果想知道都有什么方法,可以使用内置函数dir(),使用这条语句就能打印出所有方法了 print(m.hexdigest())
二、加密相关
1、检验加密结果
- 由于md5方式加密完的字符串无论原字符串有多长都是32位,因此可以使用len()方法检验是否加密成功:
print(len(m.hexdigest()))
2、md5加密之后是不可逆的
- 网络上可以解密的原理是撞库,即:将常用的密码加密完存在数据库里,然后直接搜库。
如果输入的加密后密码碰巧数据库里有,就能把对应的加密前密码返回给你,并不是真正的解密;如果是密码复杂些,他们库里没有,就会解密不出来了。
3、其他的加密方式
本文的加密方式以md5方式加密举例,还有其他的加密方式,比如:.sha1()、.sha224()、.sha256()等,加密后的字符串长度更长,安全性更高。
三、加盐
原理:
如果要对password=123456加密,这个明文密码太简单,容易撞库解密,所以在123456之后随机加一个字符串,比如abc,这样实际是对123456abc进行加密,如果不知道abc这个字符串,反解的可能性降低,安全性更高。这样的一个字符串就叫做盐。
salt = '545chjdsafl@*&' password = input('password:') password += salt #加盐,把salt和password组合到一起 m = hashlib.md5(password.encode()) result = m.hexdigest() print(result)
四、实际应用
#实现加密:传入一个值,如果有盐值,则加盐加密;否则直接加密 def my_md5(s:str,salt=None): s=str(s) if salt: s=s+salt m=hashlib.md5(s.encode()) return m.hexdigest()
扩展:
加密可用作下载,如:我们下载一些模块,或是APP下载一些东西,会事先有一个MD5、sha256等产生的一个校验码,产的校验码就是用来校验下载的文件是不是下载全了,下载完成后,先把文件MD5下,然后和事先产生的校验码对比下,完全一致,说明下载全了。还有是查看文件大小有没有变化,也可以使用MD5的方式来对比下。
任何付出都是值得的,会越来越好
本文来自博客园,作者:他还在坚持嘛,转载请注明原文链接:他还在坚持嘛 https://www.cnblogs.com/brf-test/p/11761827.html