第二屆黃河流域網路安全技能挑戰賽-esay_encrypt

Naby發表於2024-05-13

其他是一題不會啊
而且,前200就有獎?這麼好?

crypto

esay_encrypt

手推一遍(字醜勿噴)

exp:

from Crypto.Util.number import *
"""from secret import flag
def f(word, key):
    out = ""
    for i in range(len(word)):
        out += chr(ord(word[i]) ^ key)
    return out
m, n = 17, 18
num = [0]*18
flag1,flag2=flag[0:len(flag)//2], flag[len(flag)//2:]
def encrypt_1(key):
    L, R = key[0:len(key)//2], key[len(key)//2:]
    x=''
    for i in range(len(L)):
        x += chr(ord(f(R, m)[i]) ^ ord(L[i]))
    y = f(R, 2)
    L, R = y, x
    x=''
    for i in range(len(L)):
        x += "".join(chr(ord(f(R, n)[i]) ^ ord(L[i])) )
    y = f(R, 2)
    cipher = x + y
    return(cipher)
c1=encrypt_1(flag1)
with open("cipher.txt", "w") as ct:
    ct.write(c1 + "\n")
ct.close()
def encrypt_2(key):
    l=len(key)
    k = 0
    for i in range(l):
        num[i] = (ord(key[i]) + i) ^ (k % 3 + 1)
        num[l-i-1] = ((ord(key[l-i-1]) + l) - i - 1) ^ (k % 3 +1)
        k+=1
    return num
c2=encrypt_2(flag2)
print("c2=",c2)"""
c1=[0x67,0x6d,0x60,0x66,0x7a,0x56,0x31,0x76,0x5e,0x0c,0x4f,0x27,0x2b,0x2e,0x2d,0x6d,0x20,0x13]
key1=""
for i in c1:
    key1+=chr(i)
def f(word, key):
    out = ""
    for i in range(len(word)):
        out += chr(ord(word[i]) ^ key)
    return out
m, n = 17, 18
def xor(a1,a2):
    out=""
    for i in range(len(a1)):
        out+=chr(ord(a1[i])^ord(a2[i]))
    return out
def dec_1(key):
    x2, y2 = key[0:len(key) // 2], key[len(key) // 2:]
    R2=f(y2,2)
    L2=f(R2,n)
    L2=xor(L2,x2)
    R1=f(L2,2)
    L1=f(R2,m)
    L1=xor(L1,R1)
    print(L1+R1,end="")
dec_1(key1)


c2= [119, 107, 102, 97, 58, 114, 122, 124, 108, 122, 72, 45, 49, 48, 44, 49, 51, 141]
num = [0]*18
def dec_2(key):
    l=len(key)
    k=l-1
    for i in range(l-1,l//2-1,-1):
        num[i] = (key[i] ^ (k % 3 + 1)) - i
        num[l-i-1]=(key[l-i-1]^(k%3+1))-l+i+1
        k = k - 1
    return num
c2=dec_2(c2)

for i in c2:
    print(chr(i),end="")
#flag{W0w_y0U_FiND_the_4nswer@#$%!!!}

相關文章