Python函数如何进行数据加密和解密?
Python是一种高级编程语言,它有很多优秀的特点,其中包括可以非常方便地进行数据加密和解密的功能。在现代信息技术发展迅猛的时代,数据的安全性越来越重要,因此在代码中加入数据加密和解密功能成为了一项基本的要求。
一、数据加密和解密的概念
数据加密是指将明文(未经加密的数据)进行某种特殊的转换操作,按照一定的规则来加密数据,得到密文(已经加密的数据)。这样加密后的数据,即使被恶意攻击或者黑客入侵,他们也无法轻易地获得其中的信息。数据加密可分为对称加密和非对称加密两种方式。
数据解密则是将密文转换为明文的过程,通俗地讲就是把加密后的数据还原为原始的数据的过程。加密和解密通常只有持有相应密钥的人才能解读密文或者解除加密的文件。
二、对称加密
对称加密是指在加密和解密过程中使用相同的密钥。对称加密的密钥是一个秘密,保持其安全的方式有多种,如口令输入或者硬件保护。对称加密的好处是加密速度快,特别是对于大量数据的加密,是非常合适的。
代码实现:
1.首先需要使用cryptography库,用下面的代码进行安装。
pip install cryptography
2.使用Fernet函数进行加密和解密,必须要先生成加密和解密的密钥。可以使用cryptography库中的Fernet函数来生成加密和解密密钥,如下:
from cryptography.fernet import Fernet
#生成key
key = Fernet.generate_key()
#打开文件,写入key
file = open('mykey.key', 'wb')
file.write(key)
file.close()
3.使用Fernet进行加密和解密如下:
#打开文件,读入key
file = open('mykey.key', 'rb')
key = file.read()
file.close()
#将密钥转换为Fernet对象
fernet = Fernet(key)
#加密
encrypted = fernet.encrypt(b"Hello World")
print(encrypted)
#解密
decrypted = fernet.decrypt(encrypted)
print(decrypted)
将上述代码保存至encrypt.py,运行encrypt.py,结果如图:
运行结果是将“Hello World”转成了一串由 Fernet 生成的字符串,这就是加密后的字符串。并且能成功地被解密,解密后是“Hello World”。
三、非对称加密
非对称加密是指在加密和解密过程中使用的密钥不同,也就是说加密的键和解密的键是不同的。由于其安全性较高,因此常用于证书、签名等场合。使用此种方式的加密和解密速度较慢,特别是对于大量数据,会大大降低处理速度。
代码实现:
对于Python来说,RSA算法是最常用的非对称加密算法,也是Python中最实用的加密算法之一。
首先导入 Python 的 RSA 模块,并初始化一个密钥对:
import rsa
# 生成密钥对
(pubkey, privkey) = rsa.newkeys(2048)
这里我们生成了一个长度为 2048 位的密钥对,同时将 pubkey 和 privkey 都生成出来。生成密钥对后,我们可以将生成的密钥对分别保存:
# 将密钥对保存到文件,以便下次使用
with open('public.pem', 'w+') as f:
f.write(pubkey.save_pkcs1().decode())
with open('private.pem', 'w+') as f:
f.write(privkey.save_pkcs1().decode())
输入下列代码进行加密和解密:
import rsa
# 加载公钥
with open('public.pem', 'r') as f:
pubkey = rsa.PublicKey.load_pkcs1(f.read().encode())
# 加载私钥
with open('private.pem', 'r') as f:
privkey = rsa.PrivateKey.load_pkcs1(f.read().encode())
print(pubkey, privkey)
# 明文
message = 'Hello, this is a test message'
# 加密
crypto = rsa.encrypt(message.encode(), pubkey)
print(crypto)
# 解密
plain = rsa.decrypt(crypto, privkey).decode()
print(plain)
保存至encrypt.py,运行encrypt.py,结果如图:
运行结果是明文“Hello,this is a test message”被转化成了一段看起来毫无意义的字符串,这个是加密后的结果。解密后,又得到了初始的明文:Hello, this is a test message。
四、总结
Python提供了非常方便且功能强大的加密和解密工具库,数据加密的流程从生成秘钥、加密和解密三个步骤进行。其中,对称加密的特点是加密和解密使用相同的密钥,加解密速度较快,但其安全性相对较低,在对高安全性有要求的场合不太常用。而非对称加密方式,即公钥加密、私钥解密,其安全性较高,适用于对安全保密性要求较高的场合,但其加解密速度较慢。因此,在实际应用中,需要结合实际需求来选择使用哪种加密方式。
