文章目录

  • 前言
  • 95.欧几里得算法
  • 96.RSA算法介绍
  • 97.RSA算法测试
  • 98.算法课程总结
  • 总结



前言

学习python数据结构与算法,学习常用的算法,
95.欧几里得算法

python用欧几里得算法求指定数模逆元 python 欧几里得算法_python

求最大公约数
欧几里得算法:gcd(a,b) = gcd(b,a mod b) #mod取余
例:gcd(60,21) = gcd(21,18) = gcd(18,3) = gcd(3,0) = 3

相同的部分拿掉,就相当于取余

python用欧几里得算法求指定数模逆元 python 欧几里得算法_算法_02


然后继续拿掉相同的部分

python用欧几里得算法求指定数模逆元 python 欧几里得算法_算法_03


python用欧几里得算法求指定数模逆元 python 欧几里得算法_加密算法_04


最后只剩下一个21,几个21就相当于几个这个。

python用欧几里得算法求指定数模逆元 python 欧几里得算法_欧几里得算法_05


python用欧几里得算法求指定数模逆元 python 欧几里得算法_欧几里得算法_06


可以简单用欧几里得写一个分数的四则运算。

这里只写了加法python3:魔法函数__add__

python用欧几里得算法求指定数模逆元 python 欧几里得算法_算法_07

96.RSA算法介绍

RSA是非对称加密。

传统密码是别人不知道加密方法,比方说说以前罗马皇帝发明了个加密算法,把字符都往后移三位,abc 发成def

以前的传统密码可以通过暴力枚举来求出来,而现在密码是加密算法是公开的,但没有密钥是解不出这个密文的。

python用欧几里得算法求指定数模逆元 python 欧几里得算法_算法_08


Bob给Alice发密文,钥匙有两份,公钥大家都知道,是公开的,私钥是只有收件人才有的,只有它才可以破译知道密文是什么,窃密者不知道密文是什么。

python用欧几里得算法求指定数模逆元 python 欧几里得算法_加密算法_09

97.RSA算法测试

RSA加密算法过程

python用欧几里得算法求指定数模逆元 python 欧几里得算法_算法_10


首先我们取两个质数

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流,所以不是数字也没关系。

python用欧几里得算法求指定数模逆元 python 欧几里得算法_加密算法_11


这里原文是m = 87,m可以随便换

密文c = 873%3127 = 1833 (加密过程)
m = 1833
2011%3127 = 87(解密过程)

到目前为止,市面上大多数加密都是RSA算法来加密的,像https里的s,linux系统里的加密都是RSA算法,目前没有人破解这个算法。
因为两个质子相乘很简单,求一个大数由哪两个质子相乘很难,数越大越难破解,因为只能一个一个枚举,如果你能拆开,只能说是这一对密钥你破解了,而不是算法能破解,破解了再生成一个新的密钥就需要重新来破。

98.算法课程总结

贪心算法和动态规划在《算法导论》里属于高级设计与分析的思想了,但在真正的算法领域还算是沧海一粟。

总结

学习了补充的两个算法,欧几里得和RSA


文章目录

  • 前言
  • 95.欧几里得算法
  • 96.RSA算法介绍
  • 97.RSA算法测试
  • 98.算法课程总结
  • 总结