二次剩余
p 是素数,a不是p的倍数且与一个平方数模p同余,则称a是模p的二次剩余,记作 a∈QR
即∃b,使b2≡a(modp)
若不存在b,使b2≡a(modp),且a!=0, 则称a为非二次剩余,记作a∈NR
雅可比符号/勒让德符号 (p为素奇数):
(pa)={1−1,a∈QR,a∈NR
欧拉准则
设p为素奇数,有 (这里的括号是雅可比符号/勒让德符号)
公式
a2p−1≡(pa)(modp)
证:
文章作者: Abxery
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Abxery'Blog!
相关推荐

2024-10-26
BuildCTF Crypto方向wp
OVO开门爽!开到南天门了兄弟 - by abbb 经典rsa,给出了p,q的平方,直接开根就行 exp: 12345678910111213141516from Crypto.Util.number import *import gmpy2P = ...

2024-11-03
XOR
XOR Starter XOR 是按位运算符,如果位相同则返回 0,否则返回 1。在教科书中,XOR 运算符用 ⊕ 表示,但在大多数挑战和编程语言中,您会看到使用插入符号^代替。 对于更长的二进制数,我们逐位进行异或: 0110 ^ 1010 = 1100 。我们可以通过首先将整数从十进制转换为二进制来对整数进行异或。对于字符形式,首先将每个字符转换为表示 Unicode 字符的整数来对字符串进行异或。 ^运算符 是位运算符,通常用于按位异或(XOR) 操作。它要求操作数是整数类型或可以转换为整数类型的数据。 数据类型要求 整数类型(int):标准用法是在两个整数之间进行按位异或。例如: a = 5 # 二进制:0101 b = 3 # 二进制:0011 result = a ^ b # 结果为 6(二进制:0110) 布尔类型(bool):在 Python 中,布尔值可以用 ^ 进行异或操作,因为布尔值 True 和 False 实际上是整数 1 和 0 的别名。例如: result = True ^ False # 结果为 True ^...

2024-11-01
RSA-Rabin_attack
RSA-Rabin_attack 基础形态 e=2, p,q已知且满足%4=3。此时我们可以通过rabin算法解出四个明文,再判断哪个正确 源码: 123456789101112131415161718192021222324252627from Crypto.Util.number import *from gmpy2 import *flag = b'NSSCTF{******}'p = getPrime(256)q = getPrime(256)assert p%4 == 3 and q%4 == 3n = p*qe = 2m = bytes_to_long(flag)c = powmod(m, e, n)print(f'p = {p}')print(f'q = {q}')print(f'e = {e}')print(f'c =...

2024-10-30
RSA-fermat_attack
fermat_attack 源码 1234567891011121314151617181920from Crypto.Util.number import *import gmpy2flag = b'NSSCTF{******}'p = getPrime(512)q = gmpy2.next_prime(p - getPrime(256))n = p*qe = 65537phi = (p-1)*(q-1)m = bytes_to_long(flag)c = pow(m, e, n)print(f'n = {n}')print(f'e = {e}')print(f'c = {c}')'''n =...

2024-11-01
RSA-低加密指数攻击
RSA-低加密指数攻击 源码: 123456789101112131415161718192021222324from Crypto.Util.number import *from gmpy2 import *flag = b'NSSCTF{******}'p = getPrime(512)q = getPrime(512)n = p*qe = 3phi = (p-1)*(q-1)m = bytes_to_long(flag)c = powmod(m, e, n)print(f'n = {n}')print(f'e = {e}')print(f'c = {c}')'''n =...

2024-10-31
RSA-公钥因子重组
公钥因子重组 首先说明适用情况:flag较短,多个因子,求不出逆元 姿势: 对因子重组,选出新的n,然后直接rsa解密 源码: 1234567891011121314151617181920212223242526272829303132from Crypto.Util.number import *flag = b'NSSCTF{******}'p = getPrime(512)q = getPrime(512)e = 65537while True: r = 2*getPrime(100)*e+1 if isPrime(r): breakn = p*q*rm = bytes_to_long(flag)c = pow(m, e, n)print(f'p = {p}')print(f'q = {q}')print(f'r = {r}')print(f'e =...
公告
This is my Blog