前言

玩ctf经常遇到进制转换的问题,就正好做一个进制转换总结,分享出来供大家参考学习,下面来一起看看详细的介绍:

字符串与十六进制转换

例如百度ctf 12月的第二场第一个misc

666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D

比较简单的一种做法就是直接调用字符串的.decode('hex')解密即可, 但如果不用这个函数你会怎么解呢?

一种思路就是先2个分组,解出每组的ascii值,合并下字符串即可得到,具体代码如下

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}

前面说了字符串的decode('hex')函数,另外还有两个转16进制的函数,这里都总结一下

内置函数hex()

只能转换10进制整数为十六进制,不能转字符串

binascii库的hexlify()和b2a_hex()

这两个函数的功能是将字符串转换成十六进制,对应的解密函数分别为 unhexlify()和a2b_hex()

进制互转

二进制,八进制,十六进制转10进制比较简单,直接调用

int函数

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

对应的解密函数分别是

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

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

hex() //十进制转十六进制

但二进制直接转16进制就需要多走一步了,先用int转十进制,在用上面提到的hex()函数将十进制转换成十六进制,比较精简的写法是

map(lambda x:hex(int(x,2)),['0011']) //lambda表达式

或者是

[hex(int(x,2)) for x in ['0011']] //列表解析

对应的解密函数就是

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

最后在附上自己用python写的一个进制转换小工具,主要功能是对一组二进制,或者ascii,或十六进制转换成字符串,想必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

用法:

十六进制转字符串:

666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D

bintostr.py -x "666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D"

flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}

二进制转字符串:

可以有空格,也可以无空格

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

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转字符串

可以是空格分隔,也可以是,分隔

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 46 32 46 45 46 46 32'

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"

-.-. - ..-. .-.. ... -... ..--.- -... ... .-..

以上实例均来自某些ctf赛题

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对萬仟网的支持。

希望与广大网友互动??

点此进行留言吧!

python实现进制转换器_python实现各进制转换的总结大全相关推荐

  1. python实现进制转换器_python实现进制转换(二、八、十六进制;十进制)

    python实现进制转换(二.八.十六进制:十进制) (一)十进制整数转为二.八.十六进制 1.format实现转换 >>> format(2,"b") # (1 ...

  2. python中文件路径格式_Python应用-临床路径格式转换

    有这么一个需求:有近1000个临床路径,给的doc格式的文档,里面有文字描述形式的住院流程和表格形式的临床路径表单,现在需要将其中的表格按照模板存为excel格式,导入医院HIS. doc中表格是这样 ...

  3. python判断正确的是_Python输入数据类型判断正确与否的函数大全(非常全)

    对于python输入数据类型判断正确与否的函数大致有三类: (1)type(),它的作用直接可以判断出数据的类型 (2)isinstance(),它可以判断任何一个数据与相应的数据类型是否一致,比较常 ...

  4. python读取图片文件显示_Python—图像基本操作以及图像格式转换

    关于图像处理的模块常用的有 PIL,openCV等,不过应为要处理 tif 格式的图片,故特来写下这篇博客. 关于安装模块 libtiff 直接pip install libtiff 安装模块,发现无 ...

  5. python赋值语句不合法的是_Python入门习题1.温度转换

    这一节的课堂例题为: 例1.编写一个Python程序,完成摄氏度到华氏度,华氏度到摄氏度的温度转换. 解: (1)分析问题:利用程序实现温度转换,由用户输入温度值,程序给出输出结果. (2)划分边界: ...

  6. 数据结构之进制转换器实现

    进制转换器项目要求:用户提供需要转换的数据和该数据的进制,以及要转换的进制,进制转换器提供给用户最终的正确转换的结果. 转换器实例 例如,用户提供了一个十进制数:10,要求将此数据以二进制形式转换,则 ...

  7. 简单的C语言任意进制转换器

    简单的C语言任意进制转换器 该进制转换器可进行任意进制转换,请看效果图: 代码 /** ******函数声明******进制函数,输入与输出 void main();******返回将n进制num转换 ...

  8. C#底层库--万能进制转换器(自定义有序字符,支持任意进制)

    系列文章 C#底层库–RegexHelper正则表达式辅助类 本文链接:https://blog.csdn.net/youcheng_ge/article/details/109745286 C#底层 ...

  9. Python实现进制转换器

    程序功能:利用Python实现任意进制转换器 主要以十进制作为桥梁,利用m进制转十进制,十进制转n进制实现m进制到n进制的转换. 1.m进制转十进制 从最低位(最右)算起,位上的数字乘以本位的权重,加 ...

最新文章

  1. nodeJS之eventproxy源码解读
  2. SpringCloud 微服务架构,适合接私活(附源码)
  3. Spring JDBC-使用Spring JDBC获取本地连接对象以及操作BLOB/CLOB类型数据
  4. 记录 关于浏览器跨域和设置默认浏览器的问题
  5. Python基本数据类型以及字符串
  6. 如何使用Xcode分析调试在真机运行的UE4 IOS版游戏
  7. 2017-2018-1 20155327 《信息安全系统设计基础》第7周学习总结
  8. 云计算之openstack(N版)neutron网络服务最佳实践
  9. android 中的 gridview 的用法
  10. Omni Converter全能转换器安装教程
  11. JSF使用HTML5的custom attribute
  12. [转]Eclipse遇到的常见问题
  13. 怎么用谷歌学术检索下载外文文献
  14. 匹配滤波器的仿真——原理说明与仿真
  15. php新年倒计时源码,2020新年倒计时网页HTML源代码 | 一叶轻舟
  16. win7 摄像头驱动软件找不到,只有sys文件
  17. 学好数据结构的重要性
  18. Android-自定义preference和PreferenceFragment实例详解
  19. 图的邻接表存储实现(第七章 P163)
  20. 从双倍数组中还原原数组

热门文章

  1. java 开发优势_Java最核心的优势是什么?
  2. chrome中文方框linux,问:Linux下Chrome标题栏中文乱码
  3. fonts/fontawesome-webfont.woff2 404
  4. USACO2013 island travels
  5. Java经典面试题 带答案(三)
  6. 数据结构-队列-“先进先出”的数据结构
  7. 服务器查看日志几种方式
  8. 如何画双层pcb板_双层pcb板布线规则(操作技巧与案例分析)
  9. Sklearn 损失函数如何应用到_菜鸟学机器学习,Sklearn库主要模块功能简介
  10. 你即将拥有HDMI2.1,纯光纤HDMI最高支持72Gbps试用体验