Python实现 对称加密算法和非对称加密算法

353 阅读2分钟

对称加密算法和非对称加密算法是现代加密技术的两种基本形式,它们在加解密过程、速度、用途等方面有本质的区别。

 ### 对称加密算法 

1. **定义**:

对称加密算法使用相同的密钥进行加密和解密。也就是说,密钥的长度等于加密密钥的长度。

 2. **速度**:

通常对称加密算法速度较快,因为加解密过程使用的是同一个密钥。 

3. **用途**:

适合加密大量数据,如SSL握手后的数据传输加密。 

4. **示例**:

AES(高级加密标准)、DES(数据加密标准)、3DES(三重数据加密算法)。 #### 示例代码(Python中的AES加密) 

```python

 from Crypto.Cipher import AES 

from Crypto.Util.Padding import pad, unpad

 from Crypto.Random import get_random_bytes

 # 密钥长度应为32字节 

key = get_random_bytes(32) cipher = AES.new(key, AES.MODE_CBC)

 plaintext = "这是一个需要加密的文本" 

padded_text = pad(plaintext.encode(), AES.block_size) 

encrypted_text = cipher.encrypt(padded_text)

 # 加密 

print(f"Encrypted: {encrypted_text.hex()}") 

# 解密 

cipher = AES.new(key, AES.MODE_CBC, iv=cipher.iv)

 decrypted_text = unpad(cipher.decrypt(bytes.fromhex(encrypted_text.hex())), AES.block_size) 

# 解密 

print(f"Decrypted: {decrypted_text.decode()}") 

``` ### 非对称加密算法 

1. **定义**:

非对称加密算法使用一对密钥,即公钥和私钥。公钥用于加密数据,私钥用于解密数据。

 2. **速度**:

通常非对称加密算法速度较慢,因为加解密过程使用的是两个不同的密钥。 

3. **用途**:

适合加密小量的数据,如SSL握手过程中的密钥交换。 

4. **示例**:

RSA、ECC(椭圆曲线加密)、Diffie-Hellman。 

#### 示例代码(Python中的RSA加密)

 ```python 

from Crypto.PublicKey import RSA 

from Crypto.Cipher import PKCS1_OAEP

import base64 

# 生成RSA密钥对 

key = RSA.generate(2048) 

public_key = key.publickey().export_key() 

private_key = key.export_key() 

# 使用公钥加密 

cipher_rsa = PKCS1_OAEP.new(RSA.import_key(public_key)) 

msg = "这是一个需要加密的文本" 

encrypted_msg = cipher_rsa.encrypt(msg.encode()) 

# 加密 

print(f"Encrypted: {base64.b64encode(encrypted_msg).decode()}") 

# 使用私钥解密 

cipher_rsa = PKCS1_OAEP.new(RSA.import_key(private_key)) 

decrypted_msg = cipher_rsa.decrypt(base64.b64decode(encrypted_msg.encode()))

 # 解密 

print(f"Decrypted: {decrypted_msg.decode()}") 

``` 这两种加密算法在现代加密通信和数据保护中都有广泛的应用,选择哪一种算法通常取决于具体的应用场景和需求。