非对称加密与RSA加密算法

    非对称加密 symmetric encryption

    公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。

     原理:

取两个大质数p q,p<>q,N=pq

根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1)

选择一个整数E与(p-1)(q-1)互质,并且e小于(p-1)(q-1)

用以下这个公式计算d:D×E≡1(mod(p-1)(q-1)) 或 D×E mod(p-1)(q-1)≡1

(N,E)是公钥,(N,D)是私钥

假设密文是m,将m按照约好的格式将m转换为一个小于N的整数n(可以分为多段)

将n加密:

c=n^E modN

将c解密:

n=c^E modN

解码原理:假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p)

n^E mod N = c    (明文m用公钥e加密并和随机数N取余得到密文c)
c^D mod N = n (密文c用密钥解密并和随机数N取余得到明文m)
因此,两者合并就是:n^(e^d) mod N = n, 也就是:n^(ed) mod N =n= c^D mod N
=>n^(ed) mod N=c^D (1)
由费马小定理: 假如p是 质数 ,且gcd(a,p)=1,那么 a (p-1) ≡1(mod p),因为D×E≡1(mod(p-1)(q-1))
所以ed≡1(modp-1)和ed≡1(modq-1)
得到n^ED=n mod p 和n^ED=n mod q 已知gcd(p,q)=1

=>n^ED=n(mod pq) =>n^ED=n(modN) (2)

结合(1)(2)可知 c^D=n(mod N) 证明完成。



实践举例

我们用具体的数字来实践下RSA的密钥对对生成,及其加解密对全过程。为方便我们使用较小数字来模拟。

1 求N

我们准备两个很小对质数, 
p = 17 
q = 19 
N = p * q = 323

2 求L

L = lcm(p-1, q-1)= lcm(16,18) = 144 
144为16和18对最小公倍数

3 求E

求E必须要满足2个条件:1 < E < L ,gcd(E,L)=1 
即1 < E < 144,gcd(E,144) = 1 
E和144互为质数,5显然满足上述2个条件 
故E = 5

此时公钥=(E,N)= (5,323)

4 求D

求D也必须满足2个条件:1 < D < L,E*D mod L = 1 
即1 < D < 144,5 * D mod 144 = 1 
显然当D= 29 时满足上述两个条件 
1 < 29 < 144 
5*29 mod 144 = 145 mod 144 = 1 
此时私钥=(D,N)=(29,323)

5 加密

准备的明文必须时小于N的数,因为加密或者解密都要mod N其结果必须小于N 
假设明文 = 123 
则 =明文^E mod N=123^5mod323=225

6解密

=密文^Dmod N=225^29mod323=123





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值