c++用rsa加密一段文字_【安全】理解 RSA 算法

Public-key Crytography简介

Public-key cryptography (公开密钥加密) 又称 asymmetric cryptography (非对称加密),即存在两把不同的密钥,分别称为公钥 Pu 和私钥 Pr,公钥通常用来加密明文 M,只有私钥才能解密密文 C,如果用 E 和 D 分别表示加密和解密算法,那么有:

C = E(Pu, M)
M = D(Pr, C)
下图(摘自维基百科)形象的表述了加密和解密流程:

ebf55493d6dd52fd81c1114c14f1771d.png     684453bbf4aa3775fc028f41aafdffbc.png

传统的对称加密需双方共享相同的密钥,通信安全很大程度依赖双方是否能妥善的管理密钥。公开密钥加密发明是密码学最为重要的里程碑之一,它从数学的角度保证了通信安全。公开密钥加密体系有三大范畴:

1、Encryption/Decryption:即加密与解密,发送方用接收方的公钥加密消息;
2、Digital Signature:数字签名,发送方用私钥加密消息摘要生成签名,保证消息的完整性和可靠性;
3、Key Exchange:安全的交换密钥,通常用于交换对称加密的密钥。

公钥加密有多种算法,最有名的的是 RSA 和 DH 等,如下:

+----------------+-----------------------+-------------------+--------------+
| Algorithm | Encryption/Decryption | Digital Signature | Key Exchange |
+----------------+-----------------------+-------------------+--------------+
| RSA | Yes | Yes | Yes |
+----------------+-----------------------+-------------------+--------------+
| Deffie-Hellman | No | No | Yes |
+----------------+-----------------------+-------------------+--------------+
| Elliptic Curve | Yes | Yes | Yes |
+----------------+-----------------------+-------------------+--------------+
| DSS | No | Yes | No |
+----------------+-----------------------+-------------------+--------------+
数论知识

RSA 算法前,先介绍一些必要的数论领域知识。

欧拉函数

对正整数 n,欧拉函数 指小于 n 且与 n 互质的正整数数目,通常用 φ(n) 表示。

对于素数 p,有:
φ(p) = p - 1
对于素数 p, q 有:
φ(p * q) = φ(p) * φ(q) = (p - 1) * (q - 1)
如 φ(21) = 2 * 6 = 12

欧拉定理

对于正整数 a 和 n,欧拉定理有:

a^φ(n) mod n = 1
即:a^(φ(n) + 1) mod n = a mod n

模反元素

当 a, n 互质,一定存在模仿元素 b,使得:

a * b mod n = 1
由欧拉定理可知:
1 = a^φ(n) mod n = a * a^(φ(n) - 1) mod n
可求得一个 b = a^(φ(n) - 1),满足 a * b mod n = 1
RSA算法原理

RSA 简介

RSA 算法于 1977 由 Ron Rivest,Adi Shamir 和 Leonard Adleman 提出,是目前应用最为广泛的非对称加密算法。极大数分解难题是 RSA 算法可靠性的根基,即给定两个大素数 p 和 q,其中 n = p * q,有:
已知 p、q,求 n = p * q 很容易
已知 n,求 p、q,并且 p * q = n 很困难

RSA 原理

对于明文 M 和 密文 C,且 M < n, C < n,其加密和解密过程如下:

C = M^e mod n
M = C^d mod n
上述公式可表述为:
M = M^(e * d) mod n
根据欧拉定理可知:
只需 e * d mod φ(n) = 1,即可满足上式
如果我们选取素数 p, q,那么:
n = p * q 容易计算
φ(n) = (p - 1) * (q - 1) 容易计算
很容易选取一个正整数 e,e 和 φ(n) 互质
当 e 和 φ(n) 互质时:
由欧拉定理可很容易算出一个模反元素 d,满足 e * d mod φ(n) = 1

RSA 流程

Cryptography and Network Security 形象的描述了 RSA 流程:

+-------------------------------------------------------------------------------+
| Key Generation |
| |
| Select p, q p and q both prime, p != q |
| Calculate n = p * q |
| Calculate φ(n) = (p - 1) * (q - 1) |
| Select integer e e is relatively primte to φ(n) |
| Calculate d (d * e) mod n = 1 |
| Public key PU = {e, n} |
| Private key PR = {d, n} |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| Encryption |
| |
| Plaintext M M < n |
| Ciphertext C C = M^e mod n |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| Decryption |
| |
| Ciphertext C C |
| Plaintext M M = C^d mod n |
+-------------------------------------------------------------------------------+
欢迎关注交流探讨!

50b1e02283fb301abeafc80797337727.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值