编码-1

检测攻击,用的 都是ASCII可表示的可见字符,

所以unicode对这些字符编码都是一样的,不同的是各个语言,

所以我们解码就简单了:

只是针对%uxxxx  (%u00xx  和 %uFFxx)

全角数字(0-9) uFF10 - uFF19全角大文字(A-Z): uFF21 - uFF3A全角小文字(a-z): uFF41 - uFF5A

直接转十六进制 就ok

http://www.360doc.com/content/11/1223/16/2150778_174499703.shtmlhttp://wenku.baidu.com/view/2bdb81f8941ea76e58fa0427.html?re=view

请求报文(消息),由三个部分组成,从前到后分别是:

(1)start line

(2)headers

(3)body

好了,首先要明确的是(1)和(2)必须是ASCII码字符,也就是说出现在(1)和(2)里的字符编码必须为0-127之内。(3)中的内容可以是任何编码,可以是字符编码,也可以是图像的编码,也可以是任意二进制编码。至于到底里面是什么,通过(2)中的  Content-Type:头来说明。

http://blog.csdn.net/smstong/article/details/6038596

一、对于startline

method request-URL version CRLF,其中method为方法名,如GET,POST等,后跟空格,后跟请求的URL,后跟空格,后跟版本号,后跟CRLF。

这里需要注意的是URL的编码,前面已经讲过了,首先startline里的内容必须为ASCII码,而对于startline里面的URL则更为苛刻,URL的格式为http://hostname:port/p1/p2/resource,其中://为固定编码,/用来分隔路径,:用来指定端口号,resource指定资源名,p1,p2是路径名。URL的苛刻要求在于,hostname,p1,p2,resource的名称必须限定于ASCII码的一个子集,见下表:


Unreserved


[A-Za-z0-9] | "-" | "_" | "." | "!" | "~" | "*" | "‘" | "(" | ")"


Reserved


";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","


Escape


"%" <HEX> <HEX>

其中Reserved一行中的ASCII码不允许出现在hostname,p1,p2,resource中,可要是确实需要这些字符怎么办呢,此时 就需要通过称为URLEncode的方法对不允许出现的字符进行编码为允许的字符,例如本来resource的名字为~voice,那么编码后就变成 了%7Evoice,其中7E为~字符的ASCII码的十六进制的ASCII表示。原则上这种方式只能编码Reserved的ASCII码,而现在人们扩 展了这种方法,也利用这种方法编码复杂字符,如GB2312和UTF-8等,如把GB2312的“好人”编码为%BA%C3%C8%CB,把UTF-8 的"好人"编码为%E5%A5%BD%E4%BA%BA,虽然这不规范但已经成了实事上的标准了。

三、对于body

body里是什么内 容,如果是字符采用什么编码,如果是图像又采用什么格式,所有这些都是有headers里规定的。其中Content-Type规定了body里面是什 么,采用什么编码,如Content-Type: text/html; charset=UTF-8,表示body里的内容是html文件,采用UTF-8编码。这里需要注意的是对于:Content-Type: application/x-www-form-urlencoded,这是POST常用的消息类型,它表明body里放的是表单数据,采用的编码为 urlencoded。首先,这种格式的body内容必须为ASCII码,除了格式化字符自身外,其他字符必须限定于ASCII的unreserved子 集。举例来说,这种body的格式为name1=value1&name2=value2&name3=&name4=value4,name1,name2,name3,name4 为变量名,value1,value2,value3,value4为变量的值,=和&为格式化字符。这里要求 name1,name2,name3,name4,value1,value2,value4的编码必须为ASCII的UnReserved子集。

对编程的提示:

仅仅对需要URLEncode的地方进行编码,不要全部进行编码。如GET http://www.baidu.com/s?wd=~testCRLF

(1)首先确定URL的部分,不是URL的部分根本不能进行URLencode编码。显然URL部分是http://www.baidu.com/s?wd=~test。对于GET,空格,CRLF三部分不属于URL,不能进行特殊编码。

(2)确定URL部分需要URLEncoded的地方。需要进行RULEncode的只是www.baidu.com,s,wd,~test。尽管www.baidu.com,s,wd编码前后不变但它们也是需要编码的部分。而对于http://,:,/,?,=,它们本身是格式化字符,具有特殊意义不能再进行URLencode编码了。

所以startline可以这样生成:

string startline = "GET " + "http://" + URLEncode(www.baidu.com) + "/" + URLEncode("s") + "?" + URLEncode("wd") + "=" + URLEncode("~test") + "/r/n";

编码-1

时间: 2024-10-15 06:26:34

编码-1的相关文章

Python中编码的详细讲解

看这篇文章前,你应该已经知道了为什么有编码,以及编码的种类情况 ASCII 占1个字节,只支持英文 GB2312 占2个字节,支持6700+汉字 GBK GB2312的升级版,支持21000+汉字 Shift-JIS 日本字符 ks_c_5601-1987 韩国编码 TIS-620 泰国编码 由于每个国家都有自己的字符,所以其对应关系也涵盖了自己国家的字符,但是以上编码都存在局限性,即:仅涵盖本国字符,无其他国家字符的对应关系.应运而生出现了万国码,他涵盖了全球所有的文字和二进制的对应关系, U

java编码规范

右括号") "与其后面的关键字之间,关键字与其后面的左括号"("或"{"之间,以及"}"与"{"之间,要以一个空格隔开:除". "外,所有二元操作符的前.后要加空格:在逗号后边加一个空格. 说明: 一个紧跟着括号的关键词应该被空格分开: 空白应该位于参数列表中逗号的后面: 所有的二元运算符,除了".",应该使用空格将之与操作数分开.一元操作符和操作数之间不应该加空格,

微信实现定位城市并获取城市编码

最近在做一个项目是将用户的当前所在市县定位出来并展示在手机端页面,同时还要获取到该市县的城市编码从而进行数据过滤,这里重点讲定位城市及获取城市编码 前端页面代码: 首先引用腾讯地图的一个js <script type="text/javascript" src="https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js" ></script> 同时在页面加载

python字符编码

1. 字符编码简介 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符 ASCII最初只用了后七位,127个数字,已经完全能够代表键盘上所有的字符了(英文字符/键盘的所有其他字符) 后来为了将拉丁文也编码进了ASCII表,将最高位也占用了 阶段二:为了满足中文,中国人定制了GBK GBK:2Bytes代表一个字符 为了满

刨根究底字符编码之十二——UTF-8究竟是怎么编码的

UTF-8究竟是怎么编码的 1. UTF-8编码是Unicode字符集的一种编码方式(CEF),其特点是使用变长字节数(即变长码元序列.变宽码元序列)来编码.一般是1到4个字节,当然,也可以更长. 为什么要变长呢?这可以理解为按需分配,比如一个字节足以容纳所有的ASCII码字符,那何必补一堆0用更多的字节来存储呢? 实际上变长编码有其优势也有其劣势,优势是节省空间.自动纠错性能好.利于传输.扩展性强,劣势是不利于程序内部处理,比如正则表达式检索:而UTF-32这样等长码元序列(即等宽码元序列)的

Huffman树与编码

带权路径最小的二叉树称为最优二叉树或Huffman(哈夫曼树). Huffman树的构造 将节点的权值存入数组中,由数组开始构造Huffman树.初始化指针数组,指针指向含有权值的孤立节点. b = malloc(n*sizeof(BTreeNode)); for (i = 0; i < n; i++) { b[i] = malloc(sizeof(BTreeNode)); b[i]->data = a[i]; b[i]->left = NULL; b[i]->right = NU

转 常见视频编码方式以及封装格式

常见视频编码方式以及封装格式 常见视频编码方式 所谓视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式.视频流传输中最为重要的编解码标准有国际电联的H.261.H.263.H.264.H.265,运动静止图像专家组的M-JPEG和国际标准化组织运动图像专家组的MPEG系列标准,此外在互联网上被广泛应用的还有Real-Networks的RealVideo.微软公司的WMV以及Apple公司的QuickTime等. AVI AVI 是 Audio Video I

关于raw_input输入中文时的编码转换

今日在敲代码时出现了如下问题 中文的编码出现了问题(在键盘输入中文时也会出现同样的问题),中文的编码应该是utf-8编码格式,有以下两种方式来进行编码转换: (1)decode用法:str  -> decode('the_coding_of_str') -> unicode 即写为格式:raw_input('净利润为:'.decode('utf-8').encode('gbk')) (2)encode用法:unicode -> encode('the_coding_you_want')

Day2-字符编码转换

1.在python2默认编码是ASCII, python3里默认是unicode 2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间 3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string python2支持以下图: Python2# vim en

Windows程序员必须知道的字符编码和字符集

 字符编码 (Character encoding) 在存储和传递文本过程中,为了使得所有电脑都能够正确的识别出文本内容,需要有一个统一的规则. 2. 字符集 (Character Set) ) 一般情况,一种编码方式对应一种字符集.如 ASCII,对应 ASCII 字符集.GBK 编码方式对应 GBK 字符集.但是也有一种编码方式,多种字符集的,Unicode 字符集有多种编码方式,如 utf-8,utf-16 等.  3.  ASCII ASCII(American Standard Cod