1. 对称加密与非对称加密的核心区别是什么(密钥管理、加解密性能、适用场景),典型算法各举一例?
请说明对称加密与非对称加密的核心区别,包括密钥管理、加解密性能与适用场景三个方面,并各举一个典型算法?
- 对称加密单一密钥、密钥分发困难、性能高
- 非对称加密公私钥分离、密钥分发容易、性能低
- 两种体制的典型适用场景
对称加密使用同一把密钥进行加解密(如 AES),密钥管理简单但必须通过安全信道共享密钥,密钥分发是难点;由于算法结构简单、硬件(AES-NI)支持完善,性能非常高,适合批量加密数据。非对称加密使用公钥加密、私钥解密(或反之),公钥可以公开分发、无需预共享密钥,解决了密钥分发问题,但基于大整数分解或椭圆曲线离散对数,运算开销大,性能低,通常只用于加密少量数据(如会话密钥)。典型算法:对称加密为 AES,非对称加密为 RSA 或 ECC。
二者本质是"密钥共享"与"密钥分发"的不同权衡。实际工程中不会单独使用某种,而是用非对称加密协商生成对称加密的密钥,再由对称加密承担数据加密,即混合加密(数字信封)。
# 对称加密:AES-GCM(cryptography)
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
key = AESGCM.generate_key(bit_length=256)
nonce = b"123456789012" # 12字节,必须唯一
ct = AESGCM(key).encrypt(nonce, b"hello", None)
# 非对称加密:RSA-OAEP
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import rsa, padding
key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
aes_key = AESGCM.generate_key(bit_length=256)
cipher = key.public_key().encrypt(aes_key, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None))