python 中常见的加密
1:加密算法的分类
- 对称加密:
- 加密和解密使用了相同的密钥,
- 特点:速度快,安全性不高
- 非对称加密:
- 使用公钥和私钥。大概流程是,接受方发送消息前先生成公钥和私钥,
然后将公钥发送给发送方,发送将要发送的数据利用公钥进行加密后发送给接受方,接受方再用私钥进行解密
-
- 特点:速度慢,安全性高(在这个过程中,公钥负责加密,私钥负责解密,数据在传输过程中即使被截获,攻击者由于没有私钥,因此也无法破解)
2:python中常见的加密算法库
1: base64加密
base64 是一种用64个字符来表示任意二进制数据的方法,Base64编码可以称为密码学的基石。可以将任意的二进制数据进行Base64编码。所有的数据都能被编码为并只用65个字符就能表示的文本文件。
base64编码方法简单,但是却并不保险,别人很容易就能获取原始数据,通常是用来对文件进行一种格式化的操作。它是一种双向加密
注意:用于base64编码的,要么是ASCII包含的字符,要么是二进制数据
>>> import base64 >>> s = "hello world" >>> bs = base64.b64encode(s.encode('utf-8')) >>> bs b'aGVsbG8gd29ybGQ=' >>> base64.b64decode(bs) b'hello world'
2:MD5加密
MD5 加密也成为信息摘要算法。可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为128bit的串。
这个串,基本上是唯一的。因此称之为指纹。MD5 是一种单向加密技术(不可解密)。简单高效且。
具有强抗碰撞,对原文件哪怕只修改一个字符,所计算出的MD5值也会发生很大变化。
基于这些特性,MD5在数据校验上发挥有很大作用。
由于MD5模块在python3中被移除,在python3中使用hashlib模块进行md5操作
>>> import hashlib >>> s = "hello world" #待加密的信息 >>> m=hashlib.md5() #创建MD5 对象 >>> m.update(s.encode()) #将二进制数据进行加密 >>> s #加密前的数据 'hello world' >>> m.hexdigest() #加密后的数据 '5eb63bbbe01eeed093cb22bb8f5acdc3' >>>
md5的长度,默认为128bit,也就是128个0和1的二进制串。这样表达是很不友好的。所以将二进制转成了16进制,每4个bit表示一个16进制,所以128/4 = 32 换成16进制表示后,为32位了
3:SHA-1加密
与MD5类似,都属于hash算法,sha1加密相对于MD5加密要更安全些,但是效率相对于MD5会低一些。
>>> import hashlib >>> text = "hello world !" >>> sha = hashlib.sha1(text) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: Unicode-objects must be encoded before hashing #报错,再次提醒加密数据要encode() >>> sha = hashlib.sha1(text.encode()) >>> sha.hexdigest() 'b1fda0e52e8099d2aeb80f57bb91548cace3093f' >>>