BUUCTF Crypto

BUUCTF pocos WP cripto

[AFCTF2018] Morse

  • simple código Morse, el código Morse es el uso directo intuitiva la mayor parte de puntos separados por espacios y marcado, esta pregunta en torno a un poco usando una barra para dividir
    primero slash reemplazar todos los espacios, a continuación, descifrado el código Morse en línea, obtener un manojo de cadena hexadecimal hexadecimal fin de convertir
    morse

[GUET-CTF2019] BabyRSA

  • Da las siguientes condiciones
    pregunta
  • Aquí dado directamente la función de Euler, y p + q resultados, sabemos que con el fin de resolver m = pow (c, d, n), donde d es el problema ha sido dado directamente,
    de modo que el resto de la solución de n , n aquí tanto tiempo como la función de Euler y p + q desplegado calcula para obtener
  • (P + 1) (q + 1) = pq + (p + q) 1 => n = pq = (p-1) (q-1) - (p + q) -1
  • Así, en el exp final de la siguiente manera:
# -*- coding:utf-8 -*-
# Author : Konmu
# k=p+q
# phi=(p+1)(q+1)

from Crypto.Util.number import long_to_bytes

k=int('0x1232fecb92adead91613e7d9ae5e36fe6bb765317d6ed38ad890b4073539a6231a6620584cea5730b5af83a3e80cf30141282c97be4400e33307573af6b25e2ea',16)
phi=int('0x5248becef1d925d45705a7302700d6a0ffe5877fddf9451a9c1181c4d82365806085fd86fbaab08b6fc66a967b2566d743c626547203b34ea3fdb1bc06dd3bb765fd8b919e3bd2cb15bc175c9498f9d9a0e216c2dde64d81255fa4c05a1ee619fc1fc505285a239e7bc655ec6605d9693078b800ee80931a7a0c84f33c851740',16)
e=int('0xe6b1bee47bd63f615c7d0a43c529d219',16)
d=int('0x2dde7fbaed477f6d62838d55b0d0964868cf6efb2c282a5f13e6008ce7317a24cb57aec49ef0d738919f47cdcd9677cd52ac2293ec5938aa198f962678b5cd0da344453f521a69b2ac03647cdd8339f4e38cec452d54e60698833d67f9315c02ddaa4c79ebaa902c605d7bda32ce970541b2d9a17d62b52df813b2fb0c5ab1a5',16)
c=int('0x50ae00623211ba6089ddfae21e204ab616f6c9d294e913550af3d66e85d0c0693ed53ed55c46d8cca1d7c2ad44839030df26b70f22a8567171a759b76fe5f07b3c5a6ec89117ed0a36c0950956b9cde880c575737f779143f921d745ac3bb0e379c05d9a3cc6bf0bea8aa91e4d5e752c7eb46b2e023edbc07d24a7c460a34a9a',16)

n=phi-k-1
m=pow(c,d,n)
print(long_to_bytes(m))

[NCTF2019] teclado

  • Este problema honesto, contado como un poco exagerado sentimiento tema contraseña más de un pequeño agujero en el cerebro, tienden a sentirse más tipos de misceláneos
  • alfabeto primer texto cifrado de observación dado encontró después de que todas las teclas del alfabeto de la primera fila (visto desde arriba), y cada uno correspondiente a una tecla numérica secuencial
    q-> 1, w-> 2, electrónico> 3, r> 4 ...
  • En segundo lugar, encontrar la letra del texto cifrado está llena de repeticiones en 1-4 veces, y por lo tanto es adivinar la contraseña del teléfono al cuadrado
    Jiugongge
  • Las siguientes dos soluciones, una está manuscrito, uno es un guión
  • Escribí exp de la siguiente manera:
# -*- coding:utf-8 -*-
# Author : Konmu
# [NCTF2019]Keyboard

chiper='ooo yyy ii w uuu ee uuuu yyy uuuu y w uuu i i rr w i i rr rrr uuuu rrr uuuu t ii uuuu i w u rrr ee www ee yyy eee www w tt ee'
chiper=chiper.split(' ')

keys=['q','w','e','r','t','y','u','i','o']
values=[1,2,3,4,5,6,7,8,9]
dicts=dict(zip(keys,values))

jiugongge=['   ','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
new_dicts=dict(zip(values,jiugongge))

for i in range(len(chiper)):
    temp=dicts.get(chiper[i][0])
    print(''.join(new_dicts[temp][len(chiper[i])-1]),end='')

[HDCTF2019] bbbbbbrsa

  • Este problema tiene un lugar es un pozo, al principio no prestó atención a la biblioteca de importación b64encode de cambio de nombre se hizo b32encode, los problemas que quedan por resolver es cómo resolver el correo
    aquí este problema es obtener aleatorio entre 50.000 a 70.000 y phi número primo, la solución es muy sencilla, chorro de arena directamente dentro de este rango en la línea
  • El segundo punto es el pozo, al igual que los problemas cuando no participan directamente, así que la bandera no entiende el formato, uno tenía que tratar
    (donde es posible que desee plataforma BUUCTF no le dirá el formato R: Debido a que una gran cantidad de preguntas de última la respuesta se cambia el formato, por lo que en el indicador de final de {} no se ajusta, muy mal determinación இ௰இ)
  • Ejemplo exp:
# -*- coding:utf-8 -*-
# Author: Konmu

from base64 import b64decode
import gmpy2
from Crypto.Util.number import long_to_bytes

p=177077389675257695042507998165006460849
q=211330365658290458913359957704294614589
n=37421829509887796274897162249367329400988647145613325367337968063341372726061
c='==gMzYDNzIjMxUTNyIzNzIjMyYTM4MDM0gTMwEjNzgTM2UTN4cjNwIjN2QzM5ADMwIDNyMTO4UzM2cTM5kDN2MTOyUTO5YDM0czM3MjM'
c=int(b64decode(c[::-1]))
phi=(p-1)*(q-1)

for e in range(50000,70000):
    if(gmpy2.gcd(e,phi)==1):
        d=int(gmpy2.invert(e,phi))
        m=pow(c,d,n)
        if 'flag{' in long_to_bytes(m):
            print(long_to_bytes(m))

Sal y pimienta sabor de loto de pollo

  • Esto lleva a la paridad homophonic pregunta, pero la sensación real debe no paridad, precisamente, debe ser un paquete de paridad de código de Hamming
    cuando los bits de supervisión: 0000, la parte receptora genera el bit de paridad y recibidos la misma paridad, de otro modo diverso error explicación, por lo que se convierte en un problema a resolver el problema de la paridad Hamming de corrección de errores
  • Hamming de corrección de errores dividido en los siguientes pasos, en primer lugar de acuerdo con la fórmula: \ (. 2 ^ R & lt \ K + I + GEQ lt 1 + \) (K representa el número de bits de datos, r representa los bits de paridad, y si R & lt cumple con el valor mínimo de la desigualdad )
    el código Hamming se da un total de doce 110010100000 k descrito + r = 12, r es mayor que 13 debe ser un mínimo de 4, por lo que los k bits de datos a 8
  • La determinación de una paridad de 4, y la posición de descarga de la paridad bit sólo (2 ^ n \) \ posición, la determinación del código de Hamming \ (P_1, P_2, P_4, P_8 \) estas posiciones bit de paridad está
    liberado después de él después de los datos es la k (1100 0100)
  • Dicho otro problema por la orden un poco, lo que indica que los datos correctos deben ser después 000000100011, los datos válidos se libera entonces de 00.100.011
  • Allí, usted tiene los datos correctos, por lo que el resto es para obtener un error de paridad señalado
    Hanming
    NOTA: \ (P_1, P_2, P_4, P_8 \) de los datos binarios para llenar en su primera obtener el código de verificación del remitente: 1000
  • Cálculo \ (P_1, P_2, P_4, P_8 \)
    \ (P_4 = D_5 \ bigoplus D_6 \ bigoplus D_7 de \ bigoplus D_8 = 0 \ bigoplus 0 \ bigoplus. 1 \ bigoplus. 1 = 0 \)
    \ (P_3 = D_2 \ bigoplus D_3 \ bigoplus D_4 \ bigoplus D_8 = 0 \ bigoplus. 1 \ bigoplus 0 \ bigoplus. 1 = 0 \)
    \ (P_2 = D_1 \ bigoplus D_3 \ bigoplus D_4 \ bigoplus \ bigoplus D_7 de = D_6 0 \ bigoplus. 1 \ bigoplus 0 \ bigoplus 0 \ bigoplus . 1 = 0 \)
    \ (P_1 = D_1 \ bigoplus D_2 \ bigoplus D_4 \ bigoplus D_5 \ bigoplus D_7 de = 0 \ bigoplus 0 \ bigoplus 0 \ bigoplus 0 \ bigoplus 1 = 1 \)..
    Nota: Los cálculos anteriores muestran: en \ (P_4 \) , por ejemplo, la prueba sitio de prueba de todos binaria (de izquierda a derecha) el primero es un conjunto de datos, a saber, \ (D_5, D_6, D_7, D_8 \)
  • Se pueden obtener a partir de los resultados de la prueba de suma de comprobación destinatario: 0001
  • Recibir y transmitir suma de comprobación inconsistente, indica que un error, que se invierte para
    el final de los datos es: 110 110 100 000, que fue a recuento pitón md5

[HDCTF2019] RSA básico

  • El más básico de RSA
  • Ejemplo exp:
# -*- coding:utf-8 -*-
# Author: Konmu
# [HDCTF2019]basic rsa
import gmpy2
from Crypto.Util.number import *

p=262248800182277040650192055439906580479
q=262854994239322828547925595487519915551
e=65533
n=p*q
c=27565231154623519221597938803435789010285480123476977081867877272451638645710
phi=(p-1)*(q-1)

d=int(gmpy2.invert(e,phi))
m=pow(c,d,n)

print(long_to_bytes(m))

Ondas en la toma panorámica

  • Texto cifrado ver todos repiten algunas de las palabras, por lo que piensan de las estadísticas de frecuencia de palabras, para ello la frecuencia de cada una aparece la palabra, y luego en orden descendente, y finalmente llegó en la palabra 4,8,11,15,16 empalmado a
  • Exp:
# -*- coding:utf-8 -*-
# Author: Konmu

f=open("C:/Users/xxx/Desktop/浪里淘沙.txt",'r')
data=f.read()

statistics={}
frequency=[]
num=[4,8,11,15,16]
def zipin(lsit):
    for i in lsit:
        statistics.setdefault(data.count(i),str(i))
        frequency.append(data.count(i))
    frequency.sort()
    for i in num:
        print(''.join(statistics.get(frequency[i-1])),end='')
    print('\n')
    return(statistics)

if __name__ == '__main__':
    letters=["tonight","success","notice","example","should","crypto","backspace","learn","found","morning","we","system","sublim","the","user","enter"]
    print(zipin(letters))

Supongo que te gusta

Origin www.cnblogs.com/Konmu/p/12527029.html
Recomendado
Clasificación