织梦CMS - 轻松建站从此开始!

罗索

当前位置: 主页>杂项技术>PC常识>

解读Encode加密文本

罗索客 发布于 2003-10-08 11:51 点击:次 
%D3%F1%DE%B1%D0%A1%D5%BE是什么,你能猜得出是“玉薇小站”四个字么? 类似这样的%xx%xx在上网时并不鲜见。通过表单产生的电子邮件会有一个名为POSTDATA.ATT的附件文件。这个文件里面的文本,就是这种%xx%xx形式的。 这样的文本,叫做Encode,实际是一种不完全的Unicod
TAG:

%D3%F1%DE%B1%D0%A1%D5%BE是什么,你能猜得出是“玉薇小站”四个字么?

类似这样的%xx%xx在上网时并不鲜见。通过表单产生的电子邮件会有一个名为POSTDATA.ATT的附件文件。这个文件里面的文本,就是这种%xx%xx形式的。

这样的文本,叫做Encode,实际是一种不完全的Unicode 文本(见过Unicode 吗?汉字全是%uxxxx的),当表示英文或数字时,它与普通文本并无区别。但在表示各种控制符、特殊符号、扩展ASCII 字符(如汉字)甚至空格时,它就把它们全变成了%xx%xx的形式。

解读这样的文本,最简单的方法是通过javascript的函数unescape(),将这段文本头尾加上引号,放在括号里即可。不过它只适用于非扩展ASCII字符,因为它是以Unicode为基本格式的,如果你不信的话,可以拿中文试试看。一段中文Encode被unescape之后全部成了拉丁字母,仍然是一头雾水。

但是,我们可以通过编程来解决这个问题,而且编程的技术可以说是相当的简单。

我们可以先看一下这种文本的特点:按原样显示的是英文和数字,其他字符都是由一个百分号加上一个十六进制数,文本中不会出现空格。这相当地方便了我们的处理。

然后我们来看看一些常见的字符是如何表示的:http://表示为http%3A%2F%2F,空格是%20。 实际上,如果你对ASCII字符集有基本的了解,如果你和薇儿一样的细心,你已经可以发现:空格的ASCII代码是32,换成十六进制是20;冒号的代码是58,换成十六进制是3A……这会不会是以百分号做为标识的ASCII 代码?

试试百分号本身吧,%25,和它的ASCII代码37一点不差,中文呢?要是你有国标输入法——按汉字双字节ASCII 编码的输入法,可以将本文开头的一句去掉百分号输入。d3f1,出来“玉”字;deb1,出来“薇”字;d0a1,d5be,“小站”二字依次跳出。不错,这正是Encode的原理。

下面所做的事就好办了,几乎所有的编程语言都提供了将ASCII 代码转换成相应字符的功能,几乎所有的编程语言都支持十六进制数字——加个标识符(比如0x,比如&H,当然不是百分号)就行了。将你要“解密”的Encode文本存成一个文件,打开,读一行,然后扫描,碰到英文或数字就照抄,碰到百分号就读后面的两位十六进制数,然后转换……还愁看不懂吗?

这个程序,用QuickBasic写出来是下面这样(源程序太长,薇儿只写最重要的部分):

line input #1, c ''从源文件中读一行
p = 1 ''设置扫描指针
while p <= len(c)
if mid$(c, p, 1) = "%" then ''如果是百分号
x = chr$(val("&H" + mid$(c, p + 1, 2))) ''转换16进制数对应的字符
p = p + 3 ''指针后移3个字符
else
x = mid$(c, p, 1) ''直接读取字符
p = p + 1 ''指针后移1个字符
end if
print #2, x; ''将解密后的字符写入文件
wend
编译后,一次最多可以处理长达16,383字符的一行Encode代码。编译后的程序薇儿这里有,想要的话就在这儿下载吧。运行时照提示输入源文件名和目标文件名即可。 (玉薇)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/200310/2385.html]
本文出处: 作者:玉薇
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容