网络传输中的那些编码之-chr和hex(base16)

本文探讨了网络传输中两种常见的编码方式——chr和hex。chr通常由特定编程语言如Python或PHP提供,用于根据数值返回对应字符,而非标准编码格式,但在动态语言中可以通过eval函数直接解析。hex编码则是将字符转换为其ASCII码的16进制表示,有时也称为base16。文章还介绍了chr和hex在混淆传输内容和网络解码过程中的应用,并提供了解码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在前面两篇文章中,这里介绍了URL编码和base64的一些知识点,本文将对网络中另外两个常见的传输编码方式chr以及hex编码进行介绍。

chr
chr跟URL以及base64编码不同之处在于,像URL以及base64是由专门的RFC文档进行定义和说明,而chr是没有的。chr本身确切的说是某种语言,例如python或者Php提供的一个功能函数。这个函数的作用是根据参数的数值(可能是十进制也可能是十六进制),返回对应的字符。如下图1是python中chr的执行情况:
在这里插入图片描述
图1

因此在python以及php等语言中,字符a可以用chr(0x61)这种等价的形式进行表示。将chr称之为编码,对于字符a做了一种变形变换,和编码表现的形式一致。在实际的网络传输中,经常会将传输的字符使用等价的chr形式进行传输,如下图2的形式:

在这里插入图片描述

图2
你可能会有疑问,当客户端使用chr这种表示形式进行传输的时候,服务端要想识别传输的内容,需要解码还原这些内容。如果从编解码的角度考虑,应该如此,毕竟对于URL以及base64都会提供对应的编解码函数。

但是前面也提到了chr是某种语言提供的一个功能函数,本质不是编码,那么也就不需要进行解码。事实上对于python以及php这种动态执行的语言来说,都有提供eval等函数对于字符串表达式进行解析。也就是说在eval函数中会自动将chr还原成为对应的字符然后进行解析,如下图3:

在这里插入图片描述

图3
可以看到对于eval来说,会自动解析字符串pow(2,2),并将该字符串当作表达式进行执行,得到结果4。同时将字符p使用char(112)进行替换会得到同样的结果,即字符串的内容会被当作表达式先执行,因此chr(112)会先被解释成为字符p。

正是因为动态语言的这种特性,因此在网络传输的过程中,会使用chr的形式,将传输的脚本内容进行转换。经过chr的变换,使得不容易第一眼看出传输内容要表达的意图,同时这也是网络混淆常见的手段之一。

由于人对于字符比值数字更加敏感,因此在文本中使用数字形式,不容易分辨内容的真实意图,同时图3中对于混淆又做了进一步,即使用了ord函数。在python中ord函数返回的是字符对应的ASCII码。因此通过chr和ord的结合,可以形成多层的混淆,使得一些设备,无法识别其真实的意图。

raw hex
可以看到将chr形式的数据直接传输,以达到简单的混淆。有的时候可以更简单写,直接传输字符对应ASCII的16进制字符,如下图4所示:
在这里插入图片描述
图4
上图4中使用了三种形式对于传输的代码进行处理,包括chr,base64以及raw hex。其中z2参数部分的内容直接使用字符对应的ASCII的16进制字符。这样无论是人还是程序都无法第一眼识别其含义。对于z2来说必须编写指定的解码程序来还原其内容,解码函数如下:

def hex_decode(raw_hex):
	try:
		temp = ""
		for i in range(0, len(raw_hex), 2):
			temp += chr(eval('0x' + raw_hex[i] + raw_hex[i + 1]))
		return temp
	except Exception as e:
		return ""

在前面介绍了chr的功能,此处正好借助char进行raw hex的解码。

其实使用字符对应的十六进制的编码方式也被称之为base16,通过前面的文章,知道base64是以64个字符为基础的编码方式,那么base16就是以16个字符为基础的编码方式,即字符0-9,A-F,对应16进制的表示方式。因此对于raw hex也就是base16的编码方式可以直接使用python提供的函数进行解码,如下图5所示:

在这里插入图片描述
图5

其实除了base64以及base16,还有一些其他的编码方式,如base32等,下图6中是python中支持的若干种base形式的编码方式:
在这里插入图片描述
图6
知道了base64以及base16,理解起base32和base85就会很容易,即基础的字符集数量以及这些基础字符的编号不一样,整体算法是一致的,不在赘述。

本文介绍两种常见的数据传输转换形式,希望学习完本章节之后再见到网络种特殊的数据传输形式,能够知道如何还原这些数据内容。

本文为优快云村中少年原创文章,未经允许不得转载,博主链接这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村中少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值