Colección de citas famosas - Libros antiguos - Un resumen de cómo Python implementa la conversión binaria.

Un resumen de cómo Python implementa la conversión binaria.

Ctf a menudo encuentra problemas de conversión decimal, por lo que simplemente hago un resumen de la conversión decimal y lo comparto con todos como referencia. Echemos un vistazo a la introducción detallada:

Conversión de cadenas y hexadecimal

Por ejemplo, Baidu CTF 65438, el primer misceláneo de la segunda sesión de febrero.

1

666 c 61677 b 65633862326565302d 336165392d 346332313031322d 3038616135666137626536377d

Un método relativamente simple es llamarlo directamente. decode('hex ') descifra la cadena, pero ¿cómo lo resolverías sin esta función?

Una idea es dividirlo primero en dos grupos, calcular el valor ASCII de cada grupo y fusionar las cadenas para obtenerlo. El código específico es el siguiente.

1234567

importar RES = ' 666 c 61677 b 6563862326565302d 336165392d 3463323130313031322d 3038616613566661376626536 Fendal. {2} ', s)s = mapa(lambda x: chr(int(x, 16)), s)imprimir ' '. Agregue gt gt gt flag { EC 8 B2 ee 0-3ae 9-4c 21-a 012-08 aa 5a 7 be 67 }

Mencioné la función decodificar('hex ') de la cadena, y También hay otras dos funciones que se pueden convertir a 16, que se resumen aquí.

La función incorporada hex()

Solo se pueden convertir 10 números enteros decimales a hexadecimal y las cadenas no se pueden convertir.

Hexlify() y b2a_hex() de la biblioteca binascii

La función de estas dos funciones es convertir cadenas a hexadecimal, y las funciones de descifrado correspondientes son unhexlify() y a2b_hex( ).

Conversión binaria

Binario, octal, hexadecimal a 10 es relativamente simple, llámalo directamente.

Función int

1

Int(str, base) //Devuelve un entero decimal, pero tenga en cuenta que el primer parámetro es una cadena.

Las funciones de descifrado correspondientes son

12345

Bin() //10 decimal a binario oct() //Decimal a octal hex() // Decimal a hexadecimal.

Pero convertir directamente el binario a 16 es un paso más. Primero use int para convertir decimal y luego use la función hex() mencionada anteriormente para convertir decimal a hexadecimal. Una forma más sencilla de escribir es

1

Map (lambda x: hex (int (x, 2)), ['0011'])//expresión lambda

Quizás

1

[hex (int (x, 2))for x in[' 0011 ']]//Análisis de lista

El la función de descifrado correspondiente es

1

map(lambda x: bin(int(x, 16)), ['ef'])

Adjunte el último El último gadget de conversión binaria que escribí en Python, su función principal es convertir un conjunto de binarios, ascii o hexadecimal en cadenas. Creo que este tipo de problema se encuentra a menudo en ctf.

1234567891011121314151617181920212223242526272829303132333435363738394041424344

# make by Jiang señor #Codificación: utf-8 import re import arg parse def bin tostr(texto): texto = texto . reemplazar(' ', ' ')text = re.findall (r '.{8} ', text) s = map(lambda x: chr(int(x, 2)), Text)# Indicador de lote binario a decimal = ' '. Join(s) return flag def ascii tostr(texto): if ' ' en texto: texto = text.split(')elif ', ' en texto: texto = split(', ')s = map(lambda x. :chr(int(x)), texto) bandera = ' '. unirse(s) devolver bandera def hextostr(texto): texto = re encontrar todo(r '. {2} ', texto) # imprimir texto s = map(lambda x: chr(int(x, 16)), texto ) #print s bandera = ' '. Si _ _ nombre _ _ == ' _ _ principal _ _ ', la unión devuelve indicadores: parser = argparse. analizador de argumentos () analizador. agregar _ argumento ("-b") analizador. agregar _ argumento ("-a") analizador. agregar _ argv = analizador _ args () # imprimir argv si argv. (argv . b)elif argv . a:RES = asciitostr(argv . a)elif argv .x:RES = hextostr(argv . x)print RES

Uso:

十Hexadecimal a cadena:

666 c 61677 b 65633862326565302d 336165392d 346332313031322d 3038616135666137626536377d

12

bintostr py-x "6. 66 c 61677 b 65633862326565302d 336165392d 346332312d 613031322d 30386161356666137622

Binario a cadena:

Puede tener espacios o no.

00101111 01100110 00110110 00110111 0065438 010011 00110010 00110100 00110001 00110000 01100006543 8 0 01100001 0110 0100 01100011 00110000 00110011 006543 8 010111 01100110 01100010 00110000 01100011 0654 38 0100010 01100001 01100001 00 00110000 01100011 00110111 00110101 00110011 00110001 001100 11 00110111 00110011 00101110 0111010 0 01111000 01110100

12

bintostr .py-b " 001011111100110 0111111100 0165438

Ascii a cadena

se puede separar por espacios, También puede estar separado por espacios

s = ' 45 46 45 46 32 45 32 46 46 45 46 32 46 46 46 46 46 46 32 45 46 46 46 46 32 46 45 45 46 46 45. 46 32 45 46 46 46 46 32 46 46 46 32 46 46 32 46 32 46 32 46 46 46 32 46 46 46 46 45 46 46 32

bintostr .py-a " 45 46 45 46 32 45 32 46 45 46 32 46 45 46 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 46 45 45 32 45 46 46 32 45 46 32 46 46 46 46 32 46 46 46 46 46 46 46 32 46 46 46 46 46 46 32 46 46 46 46 32 46 46 46 46 32. -.-..-.. -.....-.....- .- -..... -..

Los ejemplos anteriores provienen todos de algunas preguntas del concurso ctf.

Resumen