rsa大数加密c语言,c语言实现rsa加密算法过程详解

本文详细介绍了RSA加密算法的原理和实现过程,包括如何选择质数p、q,计算欧拉函数Φ(n),以及如何生成公钥和私钥。通过C语言实现加密和解密,展示了该算法的安全性和应用。

一、RSA算法

首先, 找出三个数, p, q, r,

其中 p, q 是两个相异的质数, r 是与 (p-1)(q-1) 互质的数

p, q, r 这三个数便是 private key

接著, 找出 m, 使得 rm == 1 mod (p-1)(q-1)

这个 m 一定存在, 因为 r 与 (p-1)(q-1) 互质, 用辗转相除法就可以得到了

再来, 计算 n = pq

m, n 这两个数便是 public key

编码过程是, 若资料为 a, 将其看成是一个大整数, 假设 a 《 n

如果 a 》= n 的话, 就将 a 表成 s 进位 (s 《= n, 通常取 s = 2^t),

则每一位数均小於 n, 然後分段编码

接下来, 计算 b == a^m mod n, (0 《= b 《 n),

b 就是编码後的资料

解码的过程是, 计算 c == b^r mod pq (0 《= c 《 pq),

於是乎, 解码完毕 等会会证明 c 和 a 其实是相等的 :)

如果第三者进行窃听时, 他会得到几个数: m, n(=pq), b

他如果要解码的话, 必须想办法得到 r

所以, 他必须先对 n 作质因数分解

要防止他分解, 最有效的方法是找两个非常的大质数 p, q,

使第三者作因数分解时发生困难

《定理》

若 p, q 是相异质数, rm == 1 mod (p-1)(q-1),

a 是任意一个正整数, b == a^m mod pq, c == b^r mod pq,

则 c == a mod pq

证明的过程, 会用到费马小定理, 叙述如下:

m 是任一质数, n 是任一整数, 则 n^m == n mod m

(换另一句话说, 如果 n 和 m 互质, 则 n^(m-1) == 1 mod m)

运用一些基本的群论的知识, 就可以很容易地证出费马小定理的

《证明》

因为 rm == 1 mod (p-1)(q-1), 所以 rm = k(p-1)(q-1) + 1, 其中 k 是整数

因为在 modulo 中是 preserve 乘法的

(x == y mod z and u == v mod z =》 xu == yv mod z),

所以, c == b^r == (a^m)^r == a^(rm) == a^(k(p-1)(q-1)+1) mod pq

1. 如果 a 不是 p 的倍数, 也不是 q 的倍数时,

则 a^(p-1) == 1 mod p (费马小定理) =》 a^(k(p-1)(q-1)) == 1 mod p

a^(q-1) == 1 mod q (费马小定理) =》 a^(k(p-1)(q-1)) == 1 mod q

所以 p, q 均能整除 a^(k(p-1)(q-1)) - 1 =》 pq | a^(k(p-1)(q-1)) - 1

即 a^(k(p-1)(q-1)) == 1 mod pq

=》 c == a^(k(p-1)(q-1)+1) == a mod pq

2. 如果 a 是 p 的倍数, 但不是 q 的倍数时,

则 a^(q-1) == 1 mod q (费马小定理)

=》 a^(k(p-1)(q-1)) == 1 mod q

=》 c == a^(k(p-1)(q-1)+1) == a mod q

=》 q | c - a

因 p | a

=》 c == a^(k(p-1)(q-1)+1) == 0 mod p

=》 p | c - a

所以, pq | c - a =》 c == a mod pq

3. 如果 a 是 q 的倍数, 但不是 p 的倍数时, 证明同上

4. 如果 a 同时是 p 和 q 的倍数时,

则 pq | a

=》 c == a^(k(p-1)(q-1)+1) == 0 mod pq

=》 pq | c - a

=》 c == a mod pq

首先是密钥对的生成:

(1)选取两个大素数p和q(目前两个数的长度都接近512bit是安全的)

(2)计算乘积n=p*q,Φ(n)=(p-1)(q-1),其中Φ(n)为n的欧拉函数(因为两素数乘积的欧拉函数等于两数分别减一后的乘积)

(3)随机选取整数e(1《e《Φ(n))作为公钥d,要求满足e与Φ(n)的最大公约数为1,即两者互素

(4)用Euclid扩展算法计算私钥d,已满足d * e ≡ 1 (mod Φ(n)),即d ≡ e^(-1) (mod Φ(n))。则e与n是公钥,d是私钥

注意:e与n应公开,两个素数p和q不再需要,可销毁,但绝不可泄露。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值