1.颜文字解密

2.RSA——Python

3.U2FsdGVkX1开头——rabbit,AES,DES

4.暴力破解压缩包密码

5.serpent压缩包名即为解密方式,ECB不需要偏移

6.解码整理:

(1)一个%:utf8:urllib库里的unquote函数

(2)两个%:gb

(3)&#x:UTF8,&#:Unicode

(4)MD5码解密不一定需要32位或者16位

(5)仅有小写字母与数字组成的密文,我们可以想到MD5,hex,键盘密码等等

10.rot移位密码解密:(hou_mian_shi_flag)b%&(@f!&@$%f%e^#

11.内部赛 签到

因为包含有大小写字母,数字,最后有等号,所以首先base64解码

因为包含有很多百分号,且联想到所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成**%xx格式**的字符编码,所以使用escape解密

因为多了许多特殊符号,所以使用base92解密

得到一串数字,所以十进制转十六进制,再url解码

得到一堆星座,所以根据星座顺序得到12进制数字串,转十六进制,再转ASCII

得到数字和大写字母,再base16解密

12.内部赛 密码2

因为只有ctf和show,所以联想到摩斯密码

转化后得到:

..-.
.-..
.-
--.
----- ----- --... -...
--... ...-- -.-. -..
-.... ----- -.. -.-.
--... --... ...-- -.-.
..... ..--- ....- -..
....- . -... .-
----- ----- --... -..
..-./.-../.-/--./-----/-----/--.../-.../--.../...--/-.-./-../-..../-----/-../-.-./--.../--.../...--/-.-./...../..---/....-/-../....-/./-.../.-/-----/-----/--.../-../
F L A G 0 0 7 B 7 3 C D 6 0 D C 7 7 3 C 5 2 4 D 4 E B A 0 0 7 D

13.BJDCTF2020 编码与调制

首先了解曼彻斯特编码,10为1,01为0

将密文转化为2进制,再两位进行一个划分进行曼彻斯特编码,再转化为十六进制,再转ASCII

脚本:

x='2559659965656A9A65656996696965A6695669A9695A699569666A5A6A6569666A59695A69AA696569666AA6'
strr=bin(int(x,16))[2:]
print(strr)step = 2
str2 = [strr[i:i+step] for i in range(0,len(strr),step)]
print(str2)
flag = []
final = ""
for i in str2:flag.append(i)
for i in flag:if(i=="10"):final += "1"if(i=="01"):final += "0"
print(hex(int(final,2)))

14.BJDCTF2020 Polybius

波利比奥斯方阵密码Polybius:一般解密出来是14位

由于不知道aeiou的顺序所以分类

引用代码:

import itertools
ciper = 'ouauuuoooeeaaiaeauieuooeeiea'
head = 'aeoiu'
headlist = []
num_headlist = []# 先列举处aeiou五种的不同排序
x = itertools.permutations(head,5)
for i in x:temp = "".join(i)headlist.append(temp)
print(headlist)# 根据aeiou对应的12345修改ciper的对应值,便于后续的遍历得到结果
for i in headlist:temp = ''for j in ciper:temp += str(i.index(j) + 1)        num_headlist.append(temp)
print(num_headlist)# 将ciper对应的数字乘上比例加上96再转为ASCII码,即 可得到对应的字母
for i in num_headlist:temp = ''for j in range(0,len(i),2):xx = (int(i[j]) - 1)*5 + int(i[j+1]) + 96   # 前一个为乘上5加上后一个就正好对应了表格中的字母if xx>ord('i'):xx+=1temp += chr(xx)print(temp)

15.BJDCTF2020 这是base?

该题即是修改了base64的顺序

引用脚本:

import base64
#dict={0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U', 9: 'V', 10: 'z', 11: 'A', 12: 'B', 13: 'C', 14: 'D', 15: 'E', 16: 'F', 17: 'G', 18: 'H', 19: '7', 20: '8', 21: '9', 22: 'P', 23: 'Q', 24: 'I', 25: 'a', 26: 'b', 27: 'c', 28: 'd', 29: 'e', 30: 'f', 31: 'g', 32: 'h',33: 'i', 34: 'j', 35: 'k', 36: 'l', 37: 'm', 38: 'W', 39: 'X', 40: 'Y', 41: 'Z', 42: '0', 43: '1', 44: '2', 45: '3', 46: '4', 47: '5', 48: '6', 49: 'R', 50: 'S', 51: 'T', 52: 'n', 53: 'o', 54: 'p', 55: 'q', 56: 'r', 57: 's', 58: 't', 59: 'u', 60: 'v', 61: 'w', 62: '+', 63: '/', 64: '='}
dict='JKLMNOxyUVzABCDEFGH789PQIabcdefghijklmWXYZ0123456RSTnopqrstuvw+/='
base64_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P','Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f','g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v','w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/']
cipher='FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw'
res=''
for i in range(len(cipher)):for j in range(64):if(dict[j]==cipher[i]):res+=base64_list[j]
print(res)
flag=base64.b64decode(res)
print(flag)
#b'BJD{D0_Y0u_kNoW_Th1s_b4se_map}'

16.BJDCTF2020 伏羲六十四卦

打开压缩包得到一个脚本和一个文本

17.BJDCTF2020 easyrsa

拿到这道题首先看代码,整体思路是根据output倒推回flag

再了解不认识的函数

from Crypto.Util.number import getPrime,bytes_to_long
from sympy import Derivative
from fractions import Fraction
#from secret import flagp=getPrime(1024)
q=getPrime(1024)
e=65537
n=p*q
z=Fraction(1,Derivative(arctan(p),p))-Fraction(1,Derivative(arth(q),q))
m=bytes_to_long(flag)
c=pow(m,e,n)
print(c,z,n)

首先getprime即取一定位数范围下的素数,这里可以认为取p,q两个较大素数

z是与p,q有关系的变量,Derivative()是求导函数,Fraction(a,b)相等于a/b,这里有三个参数,第一个是分子,第二个是分母,p代表参数

经过计算可知z = p2-q2

所以p,q可用z,n表示

引用脚本:

import gmpy2
from Crypto.Util.number import *c = 7922547866857761459807491502654216283012776177789511549350672958101810281348402284098310147796549430689253803510994877420135537268549410652654479620858691324110367182025648788407041599943091386227543182157746202947099572389676084392706406084307657000104665696654409155006313203957292885743791715198781974205578654792123191584957665293208390453748369182333152809882312453359706147808198922916762773721726681588977103877454119043744889164529383188077499194932909643918696646876907327364751380953182517883134591810800848971719184808713694342985458103006676013451912221080252735948993692674899399826084848622145815461035
z = 32115748677623209667471622872185275070257924766015020072805267359839059393284316595882933372289732127274076434587519333300142473010344694803885168557548801202495933226215437763329280242113556524498457559562872900811602056944423967403777623306961880757613246328729616643032628964072931272085866928045973799374711846825157781056965164178505232524245809179235607571567174228822561697888645968559343608375331988097157145264357626738141646556353500994924115875748198318036296898604097000938272195903056733565880150540275369239637793975923329598716003350308259321436752579291000355560431542229699759955141152914708362494482
n = 15310745161336895413406690009324766200789179248896951942047235448901612351128459309145825547569298479821101249094161867207686537607047447968708758990950136380924747359052570549594098569970632854351825950729752563502284849263730127586382522703959893392329333760927637353052250274195821469023401443841395096410231843592101426591882573405934188675124326997277775238287928403743324297705151732524641213516306585297722190780088180705070359469719869343939106529204798285957516860774384001892777525916167743272419958572055332232056095979448155082465977781482598371994798871917514767508394730447974770329967681767625495394441x = gmpy2.iroot(z + 2 * n, 2)[0]
y = gmpy2.iroot(z - 2 * n, 2)[0]
e = 65537
p = (x + y) // 2
q = x - p
d = gmpy2.invert(e, (p - 1) * (q - 1))
print(long_to_bytes(pow(c, d, n)))

18.36D杯 签到

根据提示rot47解码-将符号对应改为键盘数字-base解码

19.36D杯 rsaEZ

压缩包包含三个加密后的密文文件和一个公钥文件,所以解析出e,n,再解出明文即可

引用脚本:

from Crypto.PublicKey import RSA
from Crypto.Util.number import *
import gmpy2publickey = RSA.importKey(open(r'F:\ctf comp\Crypto\题目\flag\fujian\public.key','rb').read())
e = publickey.e
n = publickey.n
p = 302825536744096741518546212761194311477
q = 325045504186436346209877301320131277983
c1 = bytes_to_long(open(r'F:\ctf comp\Crypto\题目\flag\fujian\encrypted.message1','rb').read())
c2 = bytes_to_long(open(r'F:\ctf comp\Crypto\题目\flag\fujian\encrypted.message2','rb').read())
c3 = bytes_to_long(open(r'F:\ctf comp\Crypto\题目\flag\fujian\encrypted.message3','rb').read())d = gmpy2.invert(e,(p-1)*(q-1))
m1 = pow(c1,d,n)
m2 = pow(c2,d,n)
m3 = pow(c3,d,n)
print(long_to_bytes(m1))
print(long_to_bytes(m2))
print(long_to_bytes(m3))

20.36D杯 justshow

观察26个字母向后移了一位,所以变换密文

得到gkbfnxeripjmxhemoc

再使用playfair密码解密得到明文

flagisctfshowicome

21.36D杯 飞鸽传书

打开文本文件,看到了大小写字母,数字,等号,base64,解密完之后还是大小写字母数字,再解密一次,得到包含许多%0A的数据,所以URL解码,得到八个32位字符串,所以MD5解密得到flag

22.密码学AK赛 加法

键盘位置向左移一位得到flag

23.密码学AK赛 乘法

3%20%6%19%8%15%23%6%12%1%7%9%19%8%5%18%5%

%5%18%5%8%19%9%7%1%12%6%23%15%8%19%6%20%3

24.月饼杯 中秋月

拿到题看提示,提示说该古典密码的密钥形式:keyword+plaintext (+plaintext…+plaintext)

猜测是自动密钥加密,所以思路就是由密文还原得到明文,因为提示说古典密码加密之后密文全是大写,所以需要得到全是大写字母的密文,所以再根据题目自动钥匙有异或的标志,所以将

fsskryenvkm~jl{ejs}jwflzsnpgmifq{{j{|suhzrjppnx|qvixt~whu

由异或换为全是大写字母

脚本:

s='fsskryenvkm~jl{ejs}jwflzsnpgmifq{{j{|suhzrjppnx|qvixt~whu'
for i in range(255):res=''for j in range(0,len(s)):temp = ord(s[j])^iif 65<=temp<=90 or 97<=temp<=122:  #由大小写字母构成res += (chr(temp))if len(res)==len(s):print(res)
ylltmfzqitrausdzulbuhyselqoxrvynddudcljwemuooqgcnivgkahwj
YLLTMFZQITRAUSDZULBUHYSELQOXRVYNDDUDCLJWEMUOOQGCNIVGKAHWJ

再用自动密钥解密:

脚本:

from ngram_score import ngram_score
from pycipher import Autokey
import re
from itertools import permutationsqgram = ngram_score('quadgrams.txt')
trigram = ngram_score('trigrams.txt')
ctext = 'YLLTMFZQITRAUSDZULBUHYSELQOXRVYNDDUDCLJWEMUOOQGCNIVGKAHWJ'
ctext = re.sub(r'[^A-Z]', '', ctext.upper())# keep a list of the N best things we have seen, discard anything else
class nbest(object):def __init__(self, N=1000):self.store = []self.N = Ndef add(self, item):self.store.append(item)self.store.sort(reverse=True)self.store = self.store[:self.N]def __getitem__(self, k):return self.store[k]def __len__(self):return len(self.store)# init
N = 100
for KLEN in range(8, 20):rec = nbest(N)for i in permutations('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 3):key = ''.join(i) + 'A' * (KLEN - len(i))pt = Autokey(key).decipher(ctext)score = 0for j in range(0, len(ctext), KLEN):score += trigram.score(pt[j:j + 3])rec.add((score, ''.join(i), pt[:30]))next_rec = nbest(N)for i in range(0, KLEN - 3):for k in range(N):for c in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':key = rec[k][1] + cfullkey = key + 'A' * (KLEN - len(key))pt = Autokey(fullkey).decipher(ctext)score = 0for j in range(0, len(ctext), KLEN):score += qgram.score(pt[j:j + len(key)])next_rec.add((score, key, pt[:30]))rec = next_recnext_rec = nbest(N)bestkey = rec[0][1]pt = Autokey(bestkey).decipher(ctext)bestscore = qgram.score(pt)for i in range(N):pt = Autokey(rec[i][1]).decipher(ctext)score = qgram.score(pt)if score > bestscore:bestkey = rec[i][1]bestscore = scoreprint(bestscore, 'autokey, klen', KLEN, ':"' + bestkey + '",', Autokey(bestkey).decipher(ctext).lower())

这里需要的是要配置文件和修改代码,将以下文件放同一目录下

ngram_score.py,quadgrams.txt,trigrams.txt

由于Python3已经不支持itervalues()了,所以把iter去掉。

24.月饼杯 月自圆

拿到题目给出的代码,可以知道明文长度为71位,加密后为142位。a是一个50到100的随机数,salt是随机的四位大写字母,这里我不是很明白cycle函数,所以需要去学习itertools库及循环迭代器。
这里由于a不大,salt长度也不长,且明文m中存在flag,正好可以用这几位去爆破出a和salt。
flag在明文m中的位置是53,对应密文c中的位置是105,根据代码下方的注释,可以知道第105位开始是1c29,

引用脚本进行爆破:

from random import *
from string import *
from itertools import *def decrypt(m, a, si):c=""for i in range(len(m)):c+=hex(((ord(m[i])) * a + ord(next(si))) % 128)[2:].zfill(2)return cif __name__ == "__main__":for i in range(50,100):for j in ascii_uppercase:si = cycle(j.lower())# if encrypt('f', i, si)=='1c':#    print('i =',i,'\tj =',j)if decrypt('l', i, si)=='29':print('i =',i,'\tj =',j)

根据运行结果发下a=67,

继续爆破salt的后两位:

if decrypt('a', 67, si)=='56':print('j =',j)if decrypt('g', 67, si)=='66':print('j =',j)

解密:

from random import *
from string import *
from itertools import *def decrypt(m, a, si):c=""for i in range(len(m)):c+=hex(((ord(m[i])) * a + ord(next(si))) % 128)[2:].zfill(2)return cif __name__ == "__main__":a=67salt = 'JESQ'si = cycle(salt.lower())c = '3472184e657e50561c481f5c1c4e1938163e154431015e13062c1b073d4e3a444f4a5c5c7a071919167b034e1c29566647600c4e1c2956661b6c1f50622f0016317e563546202a'q=len(c)//2s=''for i in range(q):b=c[:2]c=c[2:]sm=next(si)for k in range(1,126):m=chr(k)c1=hex(((ord(m)) * a + ord(sm)) % 128)[2:].zfill(2)#print(m,c1,int(c1,base=16)==int(b,base=16))if(int(c1,base=16)==int(b,base=16)):s+=mbreakprint(s)

得到

now_is_7fad9fcb-d361-4964-821c-177c906b8d20_flag_is_flag{md5(now-salt)}

得到now,所以md5加密now-salt,salt是JESQ

25.月饼杯 多少离怀

伽马函数Γ(x)和阶乘x!的关系式
gamma(n)=(n-1)!

威尔逊定理
当且仅当p为素数时:(p-1)! ≡ -1 (mod p)
推论:(p-2)! ≡ 1 (mod p)

欧拉函数
若n是质数p的k次幂,phi = p^k - p^(k-1)

需要求gamma(B+2)%A,根据伽马函数Γ(x)和阶乘x!的关系式可知(B+1)! % A
而根据威尔逊定理可知(A-2)! % A = 1
x = (A-2)!/(B+1)!``,y = (B+1)!,所以x * y ≡ 1 (mod A)。
而我们需要求的是y % A,y是x关于A的逆元。所以求x % A的逆元即可,用欧几里得法求逆.

引用脚本:

import random
import gmpy2
from math import gamma
from Crypto.Util.number import getPrime, isPrime
#参考大佬的exp完善了一下,2333def getNewPrime():A = getPrime(512)B = nextPrime(A - random.randint(1e4, 1e5))return nextPrime(gamma(B + 2) % A)def nextPrime(n):n += 2 if n & 1 else 1while not isPrime(n):n += 2return ndef getNewPrime2(A, B):return nextPrime(gamma2(B, A))def gcd(a, b):while a != 0:a, b = b % a, areturn bdef findModReverse(a, m):  # 这个扩展欧几里得算法求模逆if gcd(a, m) != 1:return Noneu1, u2, u3 = 1, 0, av1, v2, v3 = 0, 1, mwhile v3 != 0:q = u3 // v3v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3return u1 % mdef gamma2(b, a):res = 1# print("final: "+str(a-2+1))for i in range(b + 2, a - 2 + 1):res = (res * findModReverse(i, a)) % a# print(i)return rese = 0x10001
pA = 6814157460586876042804041951834304833424062437744287469257313954502540797027261340622077218188033865281590529907571701131297782609357118357982463723982789
pB = 6814157460586876042804041951834304833424062437744287469257313954502540797027261340622077218188033865281590529907571701131297782609357118357982463723922147
qA = 7145646366857234331692232566211321498245533826533958883943688415057871253511271731661019642050252046201115975396366275083424623329930477623781348477881291
qB = 7145646366857234331692232566211321498245533826533958883943688415057871253511271731661019642050252046201115975396366275083424623329930477623781348477807457
n = 4451906216583258787166698210560165433649728830889954633721198623488802305844782492171757604711145165920462286487680020347239300947225371917344589502941576734875830871998499135120227347066586066943289430156378296665669974728569678779668142712266780949126509440672273927433367293606776081254094682033167575930701870261219046464773708974194213798032346187463443317770758989273370488582862531630356263732232300508706676725203199729764016766683870925164232508407363688370458877688991733322055785233669885166225464068579486683574954699370175267031949720967812902215635630884502987094547523361027411501285252862476410213277925430392164226297316310465146003494714018456407793759170649913180823814850170639706664167149612984905056804131124522209409607977589884632999710708045656852149371030046919242039957767777840304466948549383597755811307383659188216421501912831203089570725388153416013596114462069777713822433178099904907224119
c = 1996198968748552041728429851810599627895157160099076033250854211280074825148767841655949210593646824507865483166496070951130337321360509148527292165245205219296211294789087358959553387392928560150390604911087085313000622842025416521494799132969818997182731021267942464323979261593380113740152841984062184326431879167516288834455296913822921806893572566867611541664848820247889274979245086440402996661226884320574824077910315143756471444347386795428338020162169391827182914043434253974549636668126789355991920452920806351939782281969098470635517019120996509180703896707990501216102290302162705699788457579330150149320348175742131887213742989509004374645723471497302400169849858253644606818874098604333865973357374444445825761600866472906771935670261641342221394488068630591190697667016958881530367047928341661857241378511420562236766886349565409774340321441504290366223243635878057759623855735794209219474650425139791831374#求 ((pA-2)!/(pB+1)!)%pA 的逆元,等于((pB+1)!)%pA ,等于gamma(pB+2)%pA
p = 1
max = (pA-2) - (pB+1)
for i in range(0,max):p = p * gmpy2.invert((pA-i-2),pA) % pA
p = nextPrime(p)
#print(p)
#求 ((qA-2)!/(qB+1)!)%qA 的逆元,等于((qB+1)!)%qA ,等于gamma(qB+2)%qA
q = 1
max = (qA-2) - (qB+1)
for i in range(0,max):q = q * gmpy2.invert((qA-i-2),qA) % qA
q = nextPrime(q)
#print(q)
#p = 721295413363782943575290202453254405609384962866760177823574558139524613289380285395875654962467791028293949737699221240830187032744030384932819874799211
#q = 3112046822677655775872849946553212669700408142233774149727014153992463597788397754366224491840784669131576610049264423785236897140841668817147645049635999fn = getNewPrime2(p,q)
#print(fn)
#fn = 3
r = gmpy2.iroot(gmpy2.mpz(n//(p*q*q)),3)[0]
#print(r)
#r = 8605581006163978513558138296576032102733660218879126657600237911024254611499452345790192297532366960817162346945271546520036031830535178172751208076290109phi = (p - 1) * (q * q - q) * (r * r * r - r * r)
d = gmpy2.invert(e,phi)
#print(d)
#d=3893796118845369439235581551299559681130294433914324573287346480568253612056224380636546037500153379857589128641230243165297526124111655151656456885394718320571011164662139031101601805935834789093718455506105414382703229813895443438508544153175032701351201540968823002419519523214390287666578730407931246445871807183537209694071828922295499346083880163169003198594519162159452952535381034048239423912932288087394862004236172433929593269810986943713662824358214779552898877881697861535560993274391395357266197384454357803117633435524780866783488594161973423232638616086772861225974312225600055495130373828730995856136891951667049900975798958834487417185610258985145585210434281769923883162243531194314167637519779543778335295761192135358383400455687647479329697758466764046259467201396085554561420952266156396111233306174055533779858729332820780458072338771340688204365931674201918683102590056383442579221021315973279544753
m = pow(c, d, n)import binascii
print(binascii.unhexlify(hex(m)[2:]))

25.1024杯 麻辣兔头第七锅

查看题目文本文件,一堆字母,再看一遍题目发现栅栏,直接引用暴力栅栏脚本

def zhalan(s):for i in range(1,len(s)):f = i    #栅栏的栏数elen = len(s)b = elen // fresult = {x:'' for x in range(b)}for i in range(elen):a = i % bresult.update({a: result[a] + s[i]})d = ''for i in range(b):d = d + result[i]f = open('a.txt','a+')f.write(d+'\n')f.close()s ='''Csoe lnno,pdsad u l tr srietaetust ht hce teiteh bomoh  oe  neppfcdw  uroiitcrimstoasnesh uucso wsii lahetpnvnis leeoc oec thwfseth h  shetiHaserhcana ,ehpdrp   p oaLiiolnamnridwpegt sesait lsncoo .ia ftfzla hli sNeanbsamggout { nmut8iderocts e 5s a t6 wmahdphone4oind awcg sbeh oe3r tfpesh ad eNr8i aa4nPttf oui8swroeueenbcr'.7hssWd   e2foG bofohcr do7mt l3,hed6 en 7a tt2seih8 ate1trls4oteed h  5t,tt}h hrTeteuhmhmta e,hts  s hsa tae tolpdo lae s rcbesaeecen uetsrm ee rl meftos-hspeetevs cieltd i erktnieotgl ,hyt t htsteh,o a  otGep ofiavfnleeilrco ntnmm seet nnho tefasi r rmea a rSnceakr fieienantdtsy et rdiae tnqeuduqt iueHradael ps,ap  mittonhhneaagstt s  M.tte hhnPee,ry u ddaeerrneic veei,nn dgio nwtdehedee idbr,y   jwtuihsletli  rpd oiCwcreteraastt eof rrt ohwmai ttt hhG eoc vecerortnnasmieennn ttu sno afll oitnehgne a ebgsloteva ebRrlinigeshdht.eshd,a  tst hhwoahutel ndae mvnoeonrtg   abtnehy e csfheoa rnamgr eeod f L fiGoforev elringmhetn ta nbde ctormaenss ideenstt rcuacutsievse;  oafn dt haecsceo rednidnsg,l yi ta lils  etxhpee rRiiegnhcte  ohfa st hseh oPweno,p lteh atto  maalntkeirn do ra rteo  maobroel idsihs piots,e da ntdo  tsou fifnesrt,i twuhtiel en eewv iGlosv earrnem esnutf,f elraaybilneg,  itthsa n to right themselves by abolishing the forms to which they are accustomed. But when a long train of abuses and usurpations, pursuing invariably the same Object, evinces a design to reduce them under absolute Despotism, it is their ri'''
zhalan(s)
print('success')

得到文本文件,搜索flag,{,},猜测是32位的md5值

ECB模式攻击

ECB加密

ecb模式使用相同的key分块对明文分别进行加密,相同的明文获得相同的密文输出。

加密条件

1、明文分块长度一般为16,或16的倍数
2、明文长度不满16,或16的倍数,使用填充(具体看算法。默认是\x00)

加密过程
Plaintext: 待加密的数据。
Key : 被一些如AES的对称加密算法使用。
Ciphertext:加密后的数据。
首先将明文进行分块成Plaintext = Plaintext0+Plaintext1+…Plaintextn.

Ciphertext0 = Encrypt(Plaintext0)
Ciphertext1 = Encrypt(Plaintext1)
.....
Ciphertextn = Encrypt(Plaintextn)

Ciphertext = Ciphertext0+Ciphertext1+…+Ciphertextn

解密过程

Plaintext0= Decrypt(Ciphertext0)
Plaintext1= Decrypt(Ciphertext1)
.....
Plaintextn= Decrypt(Ciphertextn)

ss’)


得到文本文件,搜索flag,{,},猜测是32位的md5值26.ECB模式攻击ECB加密ecb模式使用相同的key分块对明文分别进行加密,相同的明文获得相同的密文输出。加密条件1、明文分块长度一般为16,或16的倍数
2、明文长度不满16,或16的倍数,使用填充(具体看算法。默认是\x00)加密过程
Plaintext: 待加密的数据。
Key : 被一些如AES的对称加密算法使用。
Ciphertext:加密后的数据。
首先将明文进行分块成Plaintext = Plaintext0+Plaintext1+...Plaintextn.```c
Ciphertext0 = Encrypt(Plaintext0)
Ciphertext1 = Encrypt(Plaintext1)
.....
Ciphertextn = Encrypt(Plaintextn)

Ciphertext = Ciphertext0+Ciphertext1+…+Ciphertextn

解密过程

Plaintext0= Decrypt(Ciphertext0)
Plaintext1= Decrypt(Ciphertext1)
.....
Plaintextn= Decrypt(Ciphertextn)

Plaintext = Plaintext0 + Plaintext1 +… +Plaintextn

ctfshow密码学做题笔记及代码整理相关推荐

  1. C语言程序设计做题笔记之C语言基础知识(下)

    C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...

  2. verilog练习:hdlbits网站上的做题笔记(6)

    前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,推荐了一个可以练习的网站:hdlbits网站,那自己也玩玩这个网站. 这篇文章,是接着<veri ...

  3. 关于数据库设计的做题笔记——选择题+填空题+大题

    ✅ 一点整理后的做题笔记- 文章目录 一.选择题和填空题 二.大题 三.写后感 ● 我们用的教材: 一.选择题和填空题 逻辑设计阶段的任务包括设计视图,形成数据库的外模式.( ) A. 对 B. 错 ...

  4. verilog练习:hdlbits网站上的做题笔记(5)

    前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,推荐了一个可以练习的网站:hdlbits网站,那自己也玩玩这个网站. 这篇文章,是接着<veri ...

  5. verilog练习:hdlbits网站上的做题笔记(7)!强烈推荐!

    前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,推荐了一个可以练习的网站:hdlbits网站,那自己也玩玩这个网站. 这篇文章,是接着<veri ...

  6. verilog练习:hdlbits网站上的做题笔记(8)

    前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,推荐了一个可以练习的网站:hdlbits网站,那自己也玩玩这个网站. 这篇文章,是接着<veri ...

  7. buuctf-MISC篇做题笔记(2)

    buuctf-MISC篇做题笔记(2) 第七题:基础破解 先看题目提示,可能也要暴力破解 打开后是RAR文件,需要密码 我是用RARpassword暴力破解,且根据题意已知是四位纯数字密码,设置破解的 ...

  8. CS231n_1_assignment1_KNN做题笔记

    笔记 KNN部分 1.python中一个向量,每个元素平方后求和: 方法1 sum = 0 for item in vector:sum += item*item 方法2 summ = numpy.s ...

  9. 小学生加减乘除法做题系统,代码为纯c语言

    为小学的广大学子写一个,加减乘除法做题系统,思路简单清晰,欢迎品尝 文章目录 为小学的广大学子写一个,加减乘除法做题系统,思路简单清晰,欢迎品尝 代码应解决的问题: 一.代码如下 二.对代码进行测试 ...

最新文章

  1. 【基础篇】DatePickerDialog日期控件的基本使用(一)
  2. js 查找当前元素/this
  3. SIGIR 2021 | 推荐系统中的自监督图表征学习
  4. C ++ STL中的set :: upper_bound()函数
  5. 惊呆了!颜值爆表的20+位阿里技术女神同一时间向你发出共事邀请!
  6. 判断点是否在多边形内
  7. MySQL 常用工具sysbench/fio/tpcc等测试
  8. visual fortran常用数值算法集_资深游戏数值策划自白:数值不是你想象的那么简单!...
  9. 暑假集训 || 线段树
  10. 顶点计划:丢垃圾讨论
  11. 【数学】扩展欧几里得算法
  12. jquery控制下的video视频播放
  13. 一个亿,啪一下就没了!
  14. 安排,Java智慧农业物联网项目视频2020
  15. 一、深度学习和神经网络
  16. 2020美赛F题翻译
  17. 数据结构个人电话号码查询系统实验报告
  18. SurfaceView和View的区别
  19. 避雷:六种职场着装可能导致你面试失败
  20. 苹果电脑传android文件怎么打开,怎么用苹果电脑给android手机传文件

热门文章

  1. 本地数仓项目(四)—— 即席查询
  2. 腾讯云COS创建Bucket报错
  3. java中常见的英语单词
  4. 【数据结构】CH2 线性表的链式存储结构
  5. 【框架学习】AOP切面详解
  6. 一键删除VBA代码空行 VBA快捷键技巧
  7. Scala 的安装教程
  8. PC端品优购注册页面 resgister.css以及web服务器学习
  9. 基于FPGA的FM信号解调
  10. (转载)MySQL数据库的主键和外键详解