Maison > développement back-end > Tutoriel Python > Un résumé de la façon dont Python implémente diverses conversions hexadécimales

Un résumé de la façon dont Python implémente diverses conversions hexadécimales

黄舟
Libérer: 2017-06-18 11:00:53
original
2235 Les gens l'ont consulté

Cet article résume principalement les informations pertinentes permettant à Python d'implémenter diverses conversions de base, y compris la chaîne et la conversion hexadécimale, et les fonctions intégréesHex() et la conversion hexadécimale et d'autres contenus connexes, les amis dans le besoin peuvent s'y référer, jetons un coup d'œil ci-dessous.

Avant-propos

Je rencontre souvent le problème de la conversion de base lorsque je joue à CTF, j'ai donc juste fait un résumé de la conversion de base et je l'ai partagé pour la référence de chacun. Pour apprendre, jetons un œil à l'introduction détaillée :

Conversion de chaînes et hexadécimaux

Par exemple, Baidu ctf 12 Le premier divers du deuxième jeu du mois


666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D
Copier après la connexion

Un moyen plus simple est d'appeler directement le .decode('hex') décryptage de la chaîne, mais si vous ne le faites pas Je ne l'utilise pas. Comment résoudriez-vous la fonction ?

Une idée est de commencer par le groupe 2 , de résoudre la valeur ascii de chaque groupe et de fusionner les chaînes pour l'obtenir. Le code spécifique est le suivant

<🎜. >

import re
s=&#39;666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D&#39;
s = re.findall(r&#39;.{2}&#39;,s)
s = map(lambda x:chr(int(x,16)),s)
print &#39;&#39;.join(s)
>>>
flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}
Copier après la connexion
J'ai mentionné la fonction

pour les chaînes plus tôt, et il existe également deux fonctions pour la conversion en hexadécimal. Voici un résumé de la decode(&#39;hex&#39;)

. la fonction intégrée hex ()

ne peut convertir que des entiers décimaux en hexadécimal, pas des chaînes

bibliothèque binascii hexlify() et b2a_hex()

La fonction de ces deux fonctions est de convertir la chaîne en hexadécimal. Les fonctions de décryptage correspondantes sont respectivement

et unhexlify()a2b_hex()<🎜. 🎜>Conversion entre bases

La conversion binaire, octale et hexadécimale en décimal est relativement simple, il suffit d'appeler
< Les fonctions de décryptage correspondantes de 🎜>fonction int


sont respectivement


int(str,base) //返回十进制整数,但注意此时第一个参数为字符串
Copier après la connexion

mais le binaire est converti directement en hexadécimal nécessite une étape de plus. Utilisez d'abord int pour convertir en décimal, puis utilisez la fonction

mentionnée ci-dessus pour convertir le décimal en hexadécimal. La méthode d'écriture la plus simple est

bin() //10进制转二进制

oct() //十进制转八进制

hex() //十进制转十六进制
Copier après la connexion

hex()

ou <🎜. >


map(lambda x:hex(int(x,2)),[&#39;0011&#39;]) //lambda表达式
Copier après la connexion

. La fonction de décryptage correspondante est


[hex(int(x,2)) for x in [&#39;0011&#39;]] //列表解析
Copier après la connexion

Enfin, je joins une petite conversion hexadécimale. outil que j'ai écrit en python. Sa fonction principale est de convertir un ensemble de binaires, ou ascii, ou hexadécimaux en chaînes. J'ai dû souvent rencontrer ce type de question sur Bar


.
map(lambda x:bin(int(x,16)),[&#39;ef&#39;])
Copier après la connexion

Utilisation :


# make by 江sir
#coding:utf-8
import re
import argparse
 
def bintostr(text):
 text = text.replace(&#39; &#39;,&#39;&#39;)
 text = re.findall(r&#39;.{8}&#39;,text)
 s = map(lambda x:chr(int(x,2)),text) #批量二进制转十进制
 flag = &#39;&#39;.join(s)
 return flag
 
def asciitostr(text):
 if &#39; &#39; in text:
 text = text.split(&#39; &#39;)
 elif &#39;,&#39; in text:
 text = text.split(&#39;,&#39;)
 s = map(lambda x:chr(int(x)),text)
 flag = &#39;&#39;.join(s)
 return flag
 
def hextostr(text):
 text = re.findall(r&#39;.{2}&#39;,text)
 #print text
 s = map(lambda x:chr(int(x,16)),text)
 #print s
 flag = &#39;&#39;.join(s)
 return flag
 
 
if name == &#39;main&#39;:
 parser = argparse.ArgumentParser()
 parser.add_argument("-b")
 parser.add_argument("-a")
 parser.add_argument("-x")
 argv = parser.parse_args()
 #print argv
 if argv.b:
 res = bintostr(argv.b)
 elif argv.a:
 res = asciitostr(argv.a)
 elif argv.x:
 res = hextostr(argv.x)
 print res
Copier après la connexion
Hex en chaîne :

<🎜> 🎜>

Conversion binaire en chaîne :


peut aussi avoir des espaces Peut être sans espaces

00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 0110010 0 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100 011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 0111 0100 01111000 01110100


bintostr.py -x "666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D"
flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}
Copier après la connexion

ascii en chaîne

peut être séparé par des espaces ou séparé par

s ='45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 4 6 32 46 45 46 46 32'


Les exemples ci-dessus proviennent tous de certaines questions du concours CTF

bintostr.py -b "00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 01110100 01111000 01110100"
/f6732410aadc037fb0cbaa00c7531373.txt
Copier après la connexion

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal