图解对称加密与非对称加密


一、 对称加密(理想型)

用同一个公钥进行加密和解密。发送者和接收者提前约定好公钥,各自保管。

在这里插入图片描述

二、对称加密

用同一个公钥进行加密和解密。

在这里插入图片描述

三、非对称加密

用公钥进行加密,用私钥进行解密,公钥和私钥成对出现。(注意:公钥只可用作加密,不可用作解密)

四、对称加密与非对称加密结合

用非对称加密的公钥为对称加密的公钥进行加密。

在这里插入图片描述

### 非对称加密算法的工作原理和流程 非对称加密算法,也称为公钥加密算法,其核心思想是使用一对密钥:**公钥**和**私钥**。公钥用于加密数据,而私钥用于解密数据。这两个密钥在数学上是相关的,但无法通过公钥推导出私钥,这保证了非对称加密安全性[^4]。 #### 非对称加密的工作原理 1. **密钥生成** 每个用户生成一对密钥:一个公钥和一个私钥。公钥可以公开分享,而私钥必须保密。 2. **加密过程** 发送方使用接收方的公钥对明文进行加密,生成密文。 3. **解密过程** 接收方使用自己的私钥对密文进行解密,恢复原始明文。 #### 非对称加密的工作流程示意图 以下是一个典型的非对称加密工作流程: ``` 发送方(A) 接收方(B) | | | 1. 获取B的公钥 | |------------------------------------>| | | | 2. 使用B的公钥加密明文 | | 明文 + 公钥 -> 密文 | | | | 3. 发送密文 | |------------------------------------>| | | | 4. 接收方使用私钥解密 | | 密文 + 私钥 -> 明文 | | | ``` #### 非对称加密的优缺点 - **优点** - **安全性高**:即使公钥被广泛传播,也无法通过公钥推导出私钥,因此即使攻击者截获了密文和公钥,也无法轻易解密数据[^4]。 - **无需共享密钥**:通信双方不需要事先共享密钥,避免了密钥分发的问题。 - **缺点** - **计算复杂度高**:非对称加密的计算量较大,加密和解密速度较慢,性能较差,不适合大规模数据的加密[^4]。 - **效率低**:由于性能问题,非对称加密通常不直接用于加密大量数据,而是用于加密对称密钥,再由对称加密处理数据。 #### 常见的非对称加密算法 - **RSA**:基于大整数分解的难题,是最常用的非对称加密算法之一[^4]。 - **ECC(椭圆曲线加密)**:基于椭圆曲线数学问题,提供与RSA相当的安全性,但使用更短的密钥长度,适合资源受限的环境[^4]。 - **DSA(数字签名算法)**:主要用于数字签名,而不是加密[^4]。 #### RSA 算法加解密流程 以 RSA 算法为例,其加解密流程如下: 1. **密钥生成** - 选择两个大素数 $ p $ 和 $ q $。 - 计算 $ n = p \times q $。 - 计算欧拉函数 $ \phi(n) = (p-1)(q-1) $。 - 选择一个整数 $ e $,使得 $ 1 < e < \phi(n) $,且 $ e $ 与 $ \phi(n) $ 互质。 - 计算 $ d $,使得 $ d \times e \equiv 1 \mod \phi(n) $。 - 公钥为 $ (e, n) $,私钥为 $ (d, n) $。 2. **加密过程** - 明文 $ m $ 必须小于 $ n $。 - 密文 $ c = m^e \mod n $。 3. **解密过程** - 明文 $ m = c^d \mod n $。 #### 示例代码:RSA 加密与解密 ```python from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP import binascii # 生成密钥对 key = RSA.generate(2048) # 提取公钥和私钥 public_key = key.publickey() private_key = key # 创建加密器 cipher_rsa_encrypt = PKCS1_OAEP.new(public_key) cipher_rsa_decrypt = PKCS1_OAEP.new(private_key) # 加密明文 plaintext = b"Hello, this is a test message." ciphertext = cipher_rsa_encrypt.encrypt(plaintext) print("Encrypted:", binascii.hexlify(ciphertext)) # 解密密文 decrypted_text = cipher_rsa_decrypt.decrypt(ciphertext) print("Decrypted:", decrypted_text.decode()) ``` #### 非对称加密的应用场景 - **数字签名**:发送方使用自己的私钥对数据进行签名,接收方使用发送方的公钥验证签名,确保数据的完整性和身份的真实性。 - **安全通信**:通过非对称加密交换对称密钥,然后使用对称加密进行高效的数据传输。 - **身份认证**:用于验证用户或设备的身份,例如在 TLS/SSL 协议中。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值