1 因数,质数,余数
2 公钥,私钥
1)制作过程:
2) 实际操作过程:
3 具体题目解题过程中获得知识点
1)克拉默法则:
功能:确定线性方程组是否有解,以及解的唯一性。
重点!!!:只适用于方程组中未知量个数与方程个数相等的情形(具体原因?
基本形式:如果线性方程组的系数行列式不等于零,那么该方程组一定有唯一解。这个行列式可以通过将线性方程组的右端项b1, b2, …, bn分别代入原行列式的相应列元素中得到。
定理与推论:
定理1:如果线性方程组的系数行列式D不等于零,那么该方程组一定有唯一解。
定理2:如果线性方程组无解或有多个不同的解,那么它的系数行列式D必为零。
2)生日悖论
3)Floyd判圈算法(又称龟兔赛跑算法)
1 应用:
· 检测是否存在环
· 若环存在,可以计算出环的长度
· 若环存在,可以计算出环的起点
2 算法原理证明:
如图1 已知兔子和乌龟同时从链表起点S出发,兔子速度是乌龟的两倍(乌龟每次向后移动1步,兔子移动每次向后移动2步),m是S和A之间的距离,n是A和B之间的距离,A是环的起点,L是环的长度,B是兔子、乌龟第一次相遇的点。
- 环是否存在
结论:若兔子在达到链表尾部前,乌龟与兔子相遇了,则说明链表有环。
反证法:若环不存在,那么乌龟永远追不上兔子,那么在兔子到达链表尾部前乌龟不会和兔子相遇。若相遇了,则链表有环。 - 求环的长度
已知乌龟和兔子相遇时,它们必定都在环上。设它们第一次相遇在B点,相遇后兔子保持不动,乌龟保持每次移动一步的速度继续前行,第二次相遇时,环长度L=第一次相遇后到第二次相遇时乌龟走过的路程。 - 求环的起点
设乌龟走过的全部路程为i,那么有
i = m + n + aL (1)「a是乌龟绕过的环的圈数」
因为兔子的速度是乌龟的两倍,所以有
2i = m + n + bL(2)「b是兔子绕过的环的圈数」
(2) – (1)可得:
i = (b – a)L (3)
结合式子(1)、(3)可得 m + n + aL = (b – a)L,所以有
m + n = (b-2a)L(4){因为m+n>0且L>0, 所以b-2a>=1}
所以可以得出结论:m + n = 环长度L的正整数倍。(5)
当乌龟和兔子在B点第一次相遇后,让乌龟回到起点S,兔子仍在B,乌龟以每次1步的速度向前走,兔子以相同的速度绕环逆时针前进。当走了m步时,兔子和乌龟都正好在A处,即环的起点。因为兔子相对于A点走了(n+m)步,由结论(5)可知A必然是环的起点。【不懂】
4 具体题目解题过程中获得工具
1)https://factordb.com/
分解n工具,注意!!!点数字后就到上方框里了可以复制!!!(有点愚蠢但愚蠢的人没发现
具体题目:
· 来源:spc学长xc
基础rsa,在python中使用inverse()函数
1 | #from Crypto.Util.number import * |
· 来源:spc学长xc
题目提示:大数N的分解
题目:
1 | from Crypto.Util.number import * |
AI解法:
拿到题目后,我们手里只有n ,c ,e,但没有 p 和 q ,所以第一步就是分解 n。
- 先直接上 yafu / factordb
(注意!!!分解时要求P*Q=N,且注意P跟Q的bit特征,在此题当中只有512bit)
1 | p = 72224896773450610791657349018700642791668283264384520670702825479122904864127 |
(这两个数只差 112,所以 yafu 的 ECM / SIQS 都能秒破。)(yafu下载后卡死【待解决】
- 有了 p、q,就能算私钥 d
1 | from Crypto.Util.number import * |
(这题就是典型的“p、q 距离太近”导致用 Fermat 方法或 ECM 就能秒分解。)(这两个方法是什么?
· 来源:spc学长xc
1 | from Crypto.Util.number import * |
自己解出来了但方法过于复杂,无参考价值,所以只保留学长wp作为存档。
1 | from Cryptodome.Util.number import long_to_bytes as l2b |