【总结笔记】crypto
工具:
- cyberchef魔法棒
- 轩禹RSA
密码:
rockyou 筛选
grep -P '^b1.{5}b$' rockyou.txt > pass.txt |
维吉尼亚密码计算密钥–>维吉尼亚密钥只能由字母组成
def find_vigenere_key(plaintext, ciphertext): |
RSA
RSA 算法原理
- 基于大整数分解难题(IFP),是目前最广泛使用的非对称加密算法。
- 生成公私钥
- 选取大素数:选择两个不同大素数 和 ,计算 。
- 欧拉函数:计算 。若 为素数,则 。
表示小于 且与 互质的数的个数。 - 选择公钥指数:选整数 满足 且 。
- 计算私钥指数:求 在模 下的乘法逆元 ,即 。
乘法逆元:若 ,则 是 在模 下的逆元。 - 销毁中间变量:删除 和 ,保留 为公钥, 为私钥。
- 加解密过程
- 加密:将明文 转为数字,计算密文 。
- 解密:使用私钥计算明文 。
- 常见过程:—>求d—>求欧拉函数—>求大素数–>如何得到素数
补充:欧拉函数及其性质
- 多因子计算欧拉函数
- 高阶的pq计算欧拉函数
补充:模的性质
题目类型
基础RSA
- RSA常见脚本:
from Crypto.Util.number import * |
分解N
- 本地工具(yafu打开cmd使用,
- 分解因数n:.\yafu-x64.exe “factor(n)”
- 在线网站
- 注意!!!点数字后就到上方框里了可以复制!!!(有点愚蠢但愚蠢的人没发现
pq相邻素数
- 特征:
p = getPrime(512) |
- 解法:
from Crypto.Util.number import * |
pq相近
- 特征:
q = gmpy2.next_prime(p - getPrime(128)+getPrime(128)-getPrime(256)+getPrime(256)) |
- 解法:费马分解
from Crypto.Util.number import * |
共享素数
- 例题:
from Crypto.Util.number import * |
- 解法:求最小公因数
from Crypto.Util.number import * |
多个素数
- 特征:
p = getPrime(512) |
- 解法:
from Crypto.Util.number import * |
素数中有高阶次方
- 思路:素数中有高阶次方求欧拉
- 解法:
from Crypto.Util.number import * |
dpdq泄露
- 特征:
from Crypto.Util.number import * |
- 思路:存脚本
from Crypto.Util.number import * |
共模攻击
- 特征
e1 = getPrime(16) |
- 思路:存脚本
from Crypto.Util.number import * |
知识补充
- getPrime() 函数
- 在Python中通常来自 Crypto.Util.number 模块,用于生成指定位数的随机质数
- python中invert和inverse函数在ctf crypto题目应用区别
- gmpy2.invert (通常更快)
- 当逆元不存在时(gcd(a, n) != 1)
# gmpy2.invert 返回 None |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 落殷回的博客!
评论









