CRYPTO
CRYPTO
#_##
这个作者很懒,什么都没留下…
展开
-
python简单实现Rc4算法
# 密钥编排函数def KSA(key): S = [] # 状态数组 T = [] # 临时数组 #初始化S和T for i in range(256): S.append(i) T.append(key[i % len(key)]) # print(S,T) #用T产生S的初始置换 j = 0 for i in range(256): j = (j + S[i]原创 2021-10-18 15:20:26 · 965 阅读 · 0 评论 -
python实现DES算法加解密
# 从文件中读取明文# 对明文进行字符转换成比特流 每64位分一组 最后不足的用0补足# 对每组的64位比特进行IP置换 分 L,R俩组# 对L,R进行16轮的Feistel变换# 使用IP-1(IP逆置换)函数将L,R合并为密文比特流# 最后将密文比特流转换成密文字符保存import reimport libnumimport osIP_table = [58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20,原创 2021-09-27 00:49:48 · 2582 阅读 · 1 评论 -
python、C利用扩展欧几里得算法求乘法逆元 以及 实现仿射密码加解密
扩展欧几里得算法求乘法逆元扩展的欧几里德算法可用于求解a mod b的逆元,而逆元求解在RSA加密算法中是不可缺少的一步伪代码如下:def fangshe_reverse(a,b): X=[0,1] Y=[1,0] X.append(int(a)) Y.append(int(b)) def exgcd(X,Y): if Y[2] == 0: #pass print('gcd(a,b)= %d \n原创 2021-09-08 20:58:57 · 1451 阅读 · 4 评论 -
BMZCTF-crypto- writeup
BMZCTF -crypto- writeup文章目录BMZCTF -crypto- writeupSudoku&ViginereOok栅栏密码4进制2018 AFCTF Morse2018 HEBTUCTF 社会主义接班人栅栏中的baseeasy_baseCRC32 BOOM!2018 AFCTF 可怜的RSA (公钥、密文.enc)看键盘山东省大学生网络技术大赛-baby (低加密指数攻击)2018 AFCTF MagicNumeasy_rsa 分解模数nsmall_rsa 同 山东省原创 2021-08-14 13:13:00 · 2368 阅读 · 0 评论 -
2020祥云杯 crypto-more_calc
import gmpy2from Crypto.Util.number import *flag = b"flag{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}"p = getStrongPrime(2048)for i in range(1, (p+1)//2): s += pow(i, p-2, p)s = s % pq = gmpy2.next_prime(s)n = p*qe = 0x10001c = pow(bytes_to_long(f原创 2020-11-30 19:42:40 · 389 阅读 · 1 评论 -
[BUUCTF]Dangerous RSA ->低加密指数攻击
低加密指数攻击:假设e=3, e很小,但是n很大 有RSA加密公式: C=M^e % n (C密文,M明文)则:当M^e < n 时,C = M^e ,所以对C开方就能得到M当M^e > n 时,此时用爆破的方法假设我们 M^e / n (商为 k 余数为C),所以M^e = kn + C,对K进行爆破,只要k满足 kn + C能够开方就可以得明文#python3## -*- coding: utf-8 -*-#from gmpy2 import irootimport li原创 2020-11-18 21:06:31 · 6310 阅读 · 0 评论 -
[BUUCTF]RSAROLL
思路:已知比较小得n和e,用n分解模数得到p和q,用(p-1)(q-1)和e得到dpow(c,d,n)即可得密文# 已知n:920139713和e:19 大量密文c# 用比较小的n分解模数得到p = 18443 q = 49891# 由(p-1)(q-1)和e得到d# pow(c,d,n)得明文import gmpy2n = 920139713p =gmpy2.mpz(18443)q =gmpy2.mpz(49891)e =gmpy2.mpz(19)phi_n= (p - 1) *原创 2020-11-16 21:14:35 · 680 阅读 · 0 评论 -
RSA的共模攻击--[BUUCTF]-RSA3
假设有一条信息m,由两个不同的用户使用公钥进行加密(两个用户的e一般不同,模数n一般相同)c1 = m^e1 mod nc2 = m^e2 mod n得到了两个不同的密文c1,c2因为公钥是公开的(e1,e2,n)已知那么攻击者一共知道如下信息gcd(e1, e2) = 1m = c1^d1 mod nm = c2^d2 mod n若两个秘钥e互素根据扩展的欧几里得算法则存在s1,s2有:e1s1+e2s2=1所以c1^s1 mod n=m^(e1*s1) mod nc2^s2原创 2020-11-08 11:17:39 · 3274 阅读 · 1 评论 -
RSALib-cve漏洞-[GKCTF2020]Backdoor
题目提示:p=k*M+(65537**a %M)打开后发现一个算法.py文件,flag.enc和一个pub.pem查看算法,发现就是最普通的rsa,大意是用pub里的公钥n和e对flag进行了加密,加密后的结果进行base63后存在flag.enc中。打开flag.enc解密,得到#密文c02142af7ce70fe0ddae116bb7e96260274ee9252a8cb528e7fdd29809c2a6032727c05526133ae4610ed944572ff1abfcd0b17aa22原创 2020-11-05 12:51:09 · 574 阅读 · 0 评论 -
[HDCTF2019]basic rsa
import gmpy2import libnumfrom Crypto.Util.number import *#from binascii import a2b_hex,b2a_hexflag = "*****************" #flag为mp = 262248800182277040650192055439906580479q = 262854994239322828547925595487519915551e = 65533n = p*qd = gmpy2.i原创 2020-11-19 20:21:25 · 785 阅读 · 0 评论 -
[BUUCTF] RSA公钥解析
思路:同[GKCTF2020]Backdoor先进行公钥解析得到 n e分解n得 p q factordb根据p q e得到d最后用公钥加密的密文 和 私钥解密rsa.PrivateKey(n,e,d,q,p) 私钥包含(n,e,d,p,q)rsa.decrypt(f,key) f:公钥加密结果 key:私钥最后脚本:from Crypto.Util.number import *from Crypto.PublicKey import RSAimpo原创 2020-11-09 13:28:23 · 1219 阅读 · 0 评论 -
[BUUCTF]rsa2 低解密指数攻击
低解密指数攻击与低加密指数相同,低解密指数可以加快解密的过程,但是者也带来了安全问题。在RSA中d也称为解密指数,当d比较小的时候,e也就显得特别大了。适用情况:e过大或过小(一般e过大时使用)首先需要需要下载工具rsa-wiener-attack(附件里面的rsa工具中有):git clone https://github.com/pablocelayes/rsa-wiener-attack(注意,这里要将破解脚本和rsa-wiener-attack的py文件放在同一个目录下)python3原创 2020-11-20 21:58:45 · 3978 阅读 · 3 评论 -
RSA的dp泄露 [BUUCTF] RSA2
可以看到,不同于传统的RSA解密,这里给出了一个参数dp首先了解一下什么是dp:dp = d%(p-1)遍历X(e+1种可能),求出(p-1)得到p且能被n整除;接下来就是常规RSA的解法得到dfor i in range(1,e): if (dp*e-1)%i == 0: if n%(((dp*e-1)/i)+1)==0: p=((dp*e-1)/i)+1 q=n/(((dp*e-1)/i)+1)原创 2020-11-08 15:31:51 · 2021 阅读 · 2 评论 -
[RoarCTF2019]babyRSA-阶乘取模(威尔逊定理)
encodeimport sympyimport randomdef myGetPrime(): A= getPrime(513) print(A) B=A-random.randint(1e3,1e5) print(B) return sympy.nextPrime((B!)%A)p=myGetPrime()#A1=2185696345246163043734827843419143400006607675041902749385246351346986原创 2020-12-20 22:12:13 · 923 阅读 · 0 评论 -
[BJDCTF2020]easyrsa
encodefrom Crypto.Util.number import getPrime,bytes_to_longfrom sympy import Derivativefrom fractions import Fractionfrom secret import flagp=getPrime(1024)q=getPrime(1024)e=65537n=p*qz=Fraction(1,Derivative(arctan(p),p))-Fraction(1,Derivative(ar原创 2020-12-19 12:17:54 · 749 阅读 · 1 评论 -
[NCTF2019]babyRSA
encodefrom Crypto.Util.number import *from flag import flagdef nextPrime(n): n += 2 if n & 1 else 1 while not isPrime(n): n += 2 return np = getPrime(1024)q = nextPrime(p)n = p * qe = 0x10001d = inverse(e, (p-1) * (q-1))c原创 2020-12-19 11:08:39 · 898 阅读 · 5 评论 -
[GWCTF 2019]BabyRSA
import hashlibimport gmpy2import sympyfrom Crypto.Util.number import *# flag = 'GWHT{******}'# secret = '******'# assert(len(flag) == 38)# half = len(flag) / 2# flag1 = flag[:half]# flag2 = flag[half:]# secret_num = getPrime(1024) * bytes_to原创 2020-12-11 09:56:57 · 486 阅读 · 0 评论 -
[BJDCTF2020]RSA
题目给了c和e、同公钥(e,n)加密的密文、具有同q的公钥加密的密文思路:由同q的公钥,也就是n公用了素数q,通过gcd函数可以得到p,也就有p和q此时就差e就能解出题目,已知e的范围、相同公钥加密的密文可由_294c == pow(294,e,n)爆破e,脚本如下:import gmpy2from Crypto.Util.number import *# flag=open("flag","rb").read()# p=getPrime(1024)# q=getPrime(1024)#原创 2020-12-08 21:15:08 · 1399 阅读 · 0 评论 -
[HDCTF2019]bbbbbbrsa
题目给出e的取值范围 ,以及n和p、base32加密并倒序的c由n和p可得q,base32倒序解密得c只要爆破出e即可from base64 import b64encode as b32encodefrom base64 import b64decode as b32decodeimport gmpy2from Crypto.Util.number import *from binascii import a2b_hex,b2a_heximport random# flag = "**原创 2020-12-08 19:18:02 · 944 阅读 · 1 评论 -
[BJDCTF 2nd]rsa1
# [BJDCTF 2nd]rsa1import libnumfrom Crypto.Util.number import *import gmpy2e=9724343#p^2+q^2=2239294139633281123617185011681472474689536672742549210503731792886729754908012060746180678253482904480120579996537396428165992851032621330792976391092190654原创 2020-12-08 14:01:48 · 224 阅读 · 1 评论 -
[BUUCTF]RSA5 - 低加密指数广播攻击
低加密广播攻击的特点:加密指数e非常小一份明文使用不同的模数n,相同的加密指数e进行多次加密可以拿到每一份加密后的密文和对应的模数n、加密指数e此题给出的e很小且不变,给出了不同的公钥和对应的密文,也就是用不同的公钥加密相同的密文解题思路:不同的模数n中可能存在相同的p或者说q求出不同n之间的最大公约数 gcd()得到p或q 可得d有私钥d就能得到明文解密脚本:import gmpy2import libnume = 65537n0 = 2047491889405177原创 2020-12-02 14:29:07 · 4837 阅读 · 4 评论 -
[BJDCTF 2nd]rsa0
由p+q 和 p-q 得到p、q即解题e = 8542621#p+q = 18698482532406728080093200418425971262677963202439233724484717456494477495046378570706985787085759844143101902099263556198278335359888324691870230945957720x1 = 186984825324067280800932004184259712626779632024392337.原创 2020-12-02 13:32:39 · 109 阅读 · 0 评论