您的位置:首页 > 其它

RSA算法的简单认识nhe

2016-06-20 15:11 267 查看
项目上传了 现在终于有时间学习点新东西了

东西也都是学习别人结合理解写的 理解不深 毕竟没用过 希望以后用得着

以后用到的话会继续更新的

前几天一直在打算学点什么新的东西 发现自己对数据加密了解不多 上网上搜了一下 发现加密的话最屌的应该就是RSA加密 而且支付宝用的也是这个 所以就开始学习了一下

终于开始理解 为什么 人家大公司对算法要求这么高 毕竟加密这些东西需要的数学知识太多了

恩 下面说下我对它的理解吧

1.原理

RSA的基本用法是通过公钥对客户端的数据加密 然后通过私钥对客户端的数据解密完成的

RSA核心是根据欧拉函数算的 所以欧拉函数的理解非常重要

欧拉定理 : 给定任意正整数n 求 小于等于n的正整数中 有多少与n构成互质数(即两个数除了一没有其他公约数)

计算这个值的函数成为欧拉函数 用φ(n)表示

那么就有四中种情况了

1.1 等于一的时候 φ(1) = 1

1.2 为质数的时候 这种情况下 因为质数本身就只能被一和本身整除 所以 他与任何比他小的数都为质数 φ(n) = n - 1

1.3如果n为质数的某一次方 即n = a^k, 那么 φ(a^k)
= a^k - a^k-1 φ(16) = φ(2^4) = 2^4 - 2^3 = 8;

1.4将n分解为两个质数的积n
= a1 * a2, 则 φ(n) = φ(a1 * a2) = φ(a1)
* φ(a2);

1.5任意一个大于1的正整数n 可以写为

;








知道这些函数之后 就应该介绍欧拉定理了 欧拉定理指的是
如果a 和 n互质 那么下列等式成立



即a的φ(n)次方 被n的除的余数为1
我们可以验证一下 5 和7 互质 a = 5 , n = 3 则 5 ^φ(3) = 25
除三余1
当然 欧拉定理也有例外的时候
那就是正整数a和质数p互质 因为φ(p)的值为p-1欧拉定理可以写为
a^p - 1 = 1(mod p) 这就是著名的费马定理
1.6最后还需要知道一个概念 那就是模反元素
即如果正整数a和n互质 那么存在 b使得ab - 1被n整除 公式为
ab = 1(mod n)
这个时候b为a的模反元素
这个非常好证明 根据欧拉定理 a^φ(n) = 1(mod n) 推出 a^φ(n
- 1) * a = 1(mod n) 即 a必存在模反元素a^φ(n - 1);

2.下面就开始介绍RSA的使用 我们先假设一个场景
假设 小明需要向小芳发送一条信息 但是又不想被人发现 于是对信息进行加密 怎么加密呢?
这个时候
2.1小芳选了两个质数q = 37 和p = 53(实际上是不会用这么小的数的),计算乘积 n = 1961,n的长度就是秘钥的长度
1961写为二进制为11110101001 共十一为 所以秘钥的长度为十一位 但实际应用过程中 一般是1024位 重要的 2048位
2.2计算n的欧拉函数φ(n) = (p - 1)(q - 1) 则 φ(1961)等于 36 * 52 = 1872
2.3 随机取整数 在 1<
e <
φ(1961)之间 并与φ(1961)互质 小芳 取了 23
2.4计算e对于φ(n)的模反元素d 有 ed = 1 (mod
φ(n)); 我们对式子进行变形一下
ed - 1 = kφ(n) 及 ex + yφ(n) = 1 得 23x + 1872y = 1
由扩展欧几里得算法(欧几里得算法是 :对于不完全为0的非负整数a,b, gcd(a,b)表示a,b 表示ab最大公约数,必然存在x,y 使得gcd(a,b) = ax + by)得出
x = 81 ,y = -1 ,即d = 81
2.5计算完成 下面就该生成秘钥了 n和e封装成公钥 ,n和d封装成私钥 所以公钥为(1961,23) 私钥为(1961,81)

3.在上面 我们总共用到了六个数 q , p , n , e , d ,

φ(n) 因为公钥是可以被获取的 即 n 和 e是公开的 其余是不可知的 根据
ed + yφ(n) = 1得 我们需要知道φ(n)
那么就需要知道q . p所以 只要对n进行因式分解就可以破解秘钥了 但是实际操作可行吗 答案当然是否定的  12301866845301177551304949

  58384962720772853569595334

  79219732245215172640050726

  36575187452021997864693899

  56474942774063845925192557

  32630345373154826850791702

  61221429134616704292143116

  02221240479274737794080665

  351419597459856902143413

这个应该是当前人类分解最长的整数了 232个十进制位 768个二进制位 即秘钥长度为768 但是现在 人类使用的秘钥长度为1024 有的甚至为2048 所以被破解的可能性太小

4.加密和解密
有了公钥和私钥 就可以进行加密和解密了
4.1假设小明要发送信息d 使用(n,e)对d进行加密,m必须是整数(字符串取unicode值)
d^e = c (mod n) 加密就是算出式中的c 已知公钥是 (1961,23)假设m为2 可以算出c = 1411
然后小明把c = 1411发送给小芳
4.2小芳接收到1411后 利用(1961,81)进行解密
即 c^d = m(mod n)
1411^81 = m(mod 1961) 得到m = 2
至此 加密解密完成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: