Python 什么是对称和非对称密钥加密?
在计算机领域,数据安全是非常重要的,保护数据的安全性需要使用加密技术。而对称和非对称密钥加密就是常见的两种加密技术,它们有什么区别呢?
阅读更多:Python 教程
对称密钥加密
对称密钥加密是一种基于同一个密钥同时进行加密和解密的加密方法。在对称加密中,发送方和接收方使用同一个密钥来加密和解密数据。简单来说,就是同一把钥匙可以锁上和打开一个保险柜。常见的对称加密算法有DES、3DES、AES等。
下面是使用Python实现对称密钥加密的示例代码:
import base64
from Crypto.Cipher import AES
# 加密函数
def encrypt(key, plaintext):
cipher = AES.new(key.encode(), AES.MODE_ECB)
padded_plaintext = plaintext + (16 - len(plaintext) % 16) * chr(16 - len(plaintext) % 16)
ciphertext = cipher.encrypt(padded_plaintext.encode())
return base64.b64encode(ciphertext)
# 解密函数
def decrypt(key, ciphertext):
cipher = AES.new(key.encode(), AES.MODE_ECB)
padded_plaintext = cipher.decrypt(base64.b64decode(ciphertext))
plaintext = padded_plaintext[:-ord(padded_plaintext[-1])]
return plaintext
key = 'password12345678' # 密钥为16位
plaintext = 'Hello, World!'
ciphertext = encrypt(key, plaintext)
print('加密后的数据:', ciphertext.decode())
decrypted_text = decrypt(key, ciphertext)
print('解密后的数据:', decrypted_text.decode())
非对称密钥加密
非对称密钥加密与对称密钥加密不同,它使用公开密钥和私有密钥进行加密和解密。公开密钥可以公开发布,任何人都可以使用它来加密数据;而私有密钥只能由密钥所有者使用,用于解密数据。
常见的非对称加密算法有RSA、DSA等。RSA公钥加密的原理如下:
- 选两个不同的质数p和q,计算它们的乘积n=p * q,并计算欧拉函数phi(n)=(p-1) * (q-1)。
- 选取一个整数e,满足1<e<phi(n)且e与phi(n)互质。将n和e封装成公钥公开发布,e称为RSA算法的加密指数。
- 计算d,使得d*e mod phi(n)=1,d称为RSA算法的解密指数。将n和d封装成私钥保存,d仅由密钥所有者持有。
- 加密消息M时,使用公钥(n,e)进行加密,加密后的密文C=M^e mod n。
- 解密密文C时,使用私钥(n,d)进行解密,解密后的明文M=C^d mod n。
下面是使用Python实现RSA非对称加密的示例代码:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64
# 生成RSA密钥对
key = RSA.generate(1024)
private_key = key.exportKey()
public_key = key.publickey().exportKey()
# 加密函数
def encrypt(public_key, plaintext):
rsakey = RSA.importKey(public_key)
cipher = PKCS1_v1_5.new(rsakey)
ciphertext = cipher.encrypt(plaintext.encode())
return base64.b64encode(ciphertext)
# 解密函数
def decrypt(private_key, ciphertext):
rsakey = RSA.importKey(private_key)
cipher = PKCS1_v1_5.new(rsakey)
plaintext = cipher.decrypt(base64.b64decode(ciphertext), None)
return plaintext
plaintext = 'Hello, World!'
ciphertext =encrypt(public_key, plaintext)
print('加密后的数据:', ciphertext.decode())
decrypted_text = decrypt(private_key, ciphertext)
print('解密后的数据:', decrypted_text.decode())
对称加密和非对称加密的比较
对称加密和非对称加密各自有优缺点。对称加密因为加密解密使用同一把密钥,所以加解密速度快,但是密钥容易泄露,不能实现消息的完全机密。而非对称加密虽然安全性高,能够实现完全机密,但是加解密速度相对较慢。
因此,在实际应用中,对称加密和非对称加密的组合使用被广泛采用。通常使用对称加密方式加密数据,再使用非对称加密方式加密对称加密所使用的密钥,然后将加密后的密文和密钥发布给对方,对方使用非对称加密方式解密出密钥,再使用对称加密方式解密出数据,从而既保证了安全性,又提高了加解密效率。
结论
对称密钥加密和非对称密钥加密是常见的两种加密技术,它们各自的优缺点使它们在不同场景下都有着重要的应用。在实际应用中,对称加密和非对称加密的组合使用能够更好地保障数据的安全性和加解密效率。