Maison > Article > développement back-end > Un résumé de la façon dont Python implémente diverses conversions hexadécimales
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
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='666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D' s = re.findall(r'.{2}',s) s = map(lambda x:chr(int(x,16)),s) print ''.join(s) >>> flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}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('hex')
. la fonction intégrée hex ()
bibliothèque binascii hexlify() et b2a_hex()
et unhexlify()
a2b_hex()
Conversion entre bases
La conversion binaire, octale et hexadécimale en décimal est relativement simple, il suffit d'appeler
fonction int
int(str,base) //返回十进制整数,但注意此时第一个参数为字符串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() //十进制转十六进制
hex()
map(lambda x:hex(int(x,2)),['0011']) //lambda表达式
. La fonction de décryptage correspondante est
[hex(int(x,2)) for x in ['0011']] //列表解析
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)),['ef'])Utilisation :
# make by 江sir #coding:utf-8 import re import argparse def bintostr(text): text = text.replace(' ','') text = re.findall(r'.{8}',text) s = map(lambda x:chr(int(x,2)),text) #批量二进制转十进制 flag = ''.join(s) return flag def asciitostr(text): if ' ' in text: text = text.split(' ') elif ',' in text: text = text.split(',') s = map(lambda x:chr(int(x)),text) flag = ''.join(s) return flag def hextostr(text): text = re.findall(r'.{2}',text) #print text s = map(lambda x:chr(int(x,16)),text) #print s flag = ''.join(s) return flag if name == 'main': 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 resHex en chaîne :
3bb3ba5d8a8c1e677360c9d603cb067b 🎜>
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}
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
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!