文章目录
- 前言
- 95.欧几里得算法
- 96.RSA算法介绍
- 97.RSA算法测试
- 98.算法课程总结
- 总结
前言
学习python数据结构与算法,学习常用的算法,
95.欧几里得算法
求最大公约数
欧几里得算法:gcd(a,b) = gcd(b,a mod b) #mod取余
例:gcd(60,21) = gcd(21,18) = gcd(18,3) = gcd(3,0) = 3
相同的部分拿掉,就相当于取余
然后继续拿掉相同的部分
最后只剩下一个21,几个21就相当于几个这个。
可以简单用欧几里得写一个分数的四则运算。
这里只写了加法python3:魔法函数__add__
96.RSA算法介绍
RSA是非对称加密。
传统密码是别人不知道加密方法,比方说说以前罗马皇帝发明了个加密算法,把字符都往后移三位,abc 发成def
以前的传统密码可以通过暴力枚举来求出来,而现在密码是加密算法是公开的,但没有密钥是解不出这个密文的。
Bob给Alice发密文,钥匙有两份,公钥大家都知道,是公开的,私钥是只有收件人才有的,只有它才可以破译知道密文是什么,窃密者不知道密文是什么。
97.RSA算法测试
RSA加密算法过程
首先我们取两个质数
p = 53
q = 59
n = pq = 3127
fai = (p-1)(q-1) = 3016
取与fai互质的小奇数e = 3
第四步 略过计算,这些需要数论知识来求解 ,得出d = 2011
(3*2011%3016 = 1)
e和n组成公钥,d和n组成私钥,m是原文,因为所有数据通过电脑都能转换成01流,所以不是数字也没关系。
这里原文是m = 87,m可以随便换
密文c = 873%3127 = 1833 (加密过程)
m = 18332011%3127 = 87(解密过程)
到目前为止,市面上大多数加密都是RSA算法来加密的,像https里的s,linux系统里的加密都是RSA算法,目前没有人破解这个算法。
因为两个质子相乘很简单,求一个大数由哪两个质子相乘很难,数越大越难破解,因为只能一个一个枚举,如果你能拆开,只能说是这一对密钥你破解了,而不是算法能破解,破解了再生成一个新的密钥就需要重新来破。
98.算法课程总结
贪心算法和动态规划在《算法导论》里属于高级设计与分析的思想了,但在真正的算法领域还算是沧海一粟。
总结
学习了补充的两个算法,欧几里得和RSA
文章目录
- 前言
- 95.欧几里得算法
- 96.RSA算法介绍
- 97.RSA算法测试
- 98.算法课程总结
- 总结