Maison >développement back-end >Tutoriel Python >Introduction à la conversion entre bases python
Cet article résume principalement les informations pertinentes pour vous permettre d'implémenter diverses conversions de base en python, y compris la conversion de chaîne et hexadécimale, la fonction intégrée hex() et la conversion de base, etc. Les amis qui en ont besoin peuvent Pour référence, prenons un regarde 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 grouper 2 d'abord, 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. En voici un résumé decode('hex')
Fonction intégrée hex(. )
bibliothèque binascii hexlify() et b2a_hex()
et unhexlify()
a2b_hex()
Conversion entre bases.
int(str,base) //返回十进制整数,但注意此时第一个参数为字符串Les fonctions de décryptage correspondantes sont
bin() //10进制转二进制 oct() //十进制转八进制 hex() //十进制转十六进制Mais il faut plus de temps pour convertir directement le binaire en hexadécimal. Allons plus loin. Utilisons 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 façon la plus simple de l'écrire est hex()
map(lambda x:hex(int(x,2)),['0011']) //lambda表达式ou
.
[hex(int(x,2)) for x in ['0011']] //列表解析. La fonction de décryptage correspondante est
map(lambda x:bin(int(x,16)),['ef'])Enfin, ajoutez-vous Un petit outil de conversion hexadécimal écrit en python. Sa fonction principale est de convertir un ensemble de nombres binaires, ou ascii, ou hexadécimaux en chaînes. Je dois souvent rencontrer ce type de question sur CTF
# 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 res.
Utilisation :
Hex vers chaîne :
bintostr.py -x "666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D" flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}
Conversion binaire en chaîne :
00101111 01100110 00110110 00110111 00110011 00110010 00110100 00 110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 0011011 1 00110101 00110011 0001 00110011 00110111 00110011 00101110 01110100 01111000 01110100
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
ascii en chaîne
bintostr.py -a "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 46 32 46 45 46 46 32" -.-. - ..-. .-.. ... -... ..--.- -... ... .-..Les exemples ci-dessus proviennent tous de compétitions du CTF questions
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!