HTTP報文URL解碼實現
來自專欄信息安全入門筆記16 人贊了文章
URL編碼的姐妹篇 HTTP報文URL編碼實現 .
Content-Type
指定為application/x-www-form-urlencoded
的時候
我們提交的數據編碼形式是通過&
連接 比如key="<hack>"&
value="ailx10"
同時<hack>
和ailx10
會進行URL編碼
key=
%3C
hack%3E
&value=ailx10
%3C:<
%3E:>
0x3C
是<
的ASCII
碼 %3E
是>
的ASCII
碼
所以懂了嗎?URL
編碼就是將字元編碼成ASCII
碼或其他
那麼URLDecode
的意思就是將ASCII
碼或其他 轉化成字元
這裡方便理解以ASCII
碼為例子 記住不僅僅是ASCII
碼哦
當我們遇到%
的時候 意味著轉碼開始 連續2個16進位數字 比如%3C
URL
轉碼就是將%3C
轉為char
型10進位數據60
記住這裡只佔1個位元組哦
怎麼玩呢?代碼如下
解釋一下HEX2DEC
數據的意義
16進位轉10進位的轉換表 ASCII
碼10進位48是字元0
65是字元A
97是字元a
在看看HEX2DEC
數組
HEX2DEC[48] = 0
HEX2DEC[65] = AHEX2DEC[97] = a
所以現在理解了吧 ~~~
void utils_uri_decode(const unsigned char* sSrc,char* dst) { const unsigned char *pSrc = sSrc; size_t src_len = strlen((const char*)sSrc); const unsigned char *src_end = pSrc + src_len; const unsigned char *src_last_dec = src_end - 2; char *pStart = dst; char *pEnd = pStart; while (pSrc < src_last_dec) { if (*pSrc == %) { char dec1, dec2, guard = -1; if (guard != (dec1 = HEX2DEC[*(pSrc + 1)]) && guard != (dec2 = HEX2DEC[*(pSrc + 2)])) { *pEnd++ = (dec1 << 4) + dec2; pSrc += 3; continue; } } *pEnd++ = *pSrc++; } while (pSrc < src_end) { *pEnd++ = *pSrc++; } return;}
const char HEX2DEC[256] = { /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ /* 0 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* 1 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* 2 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* 3 */ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* 4 */ (char)-1, 10, 11, 12, 13, 14, 15, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* 5 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* 6 */ (char)-1, 10, 11, 12, 13, 14, 15, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* 7 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* 8 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* 9 */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* A */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* B */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* C */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* D */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* E */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, /* F */ (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1, (char)-1};
推薦閱讀:
※如何看待阿里沒有二進位安全研究的環境?
※如何入侵學校廣播?
※AI技術被黑客利用?
※電腦課上如何黑進老師的電腦。控制全班,甚至老師的電腦?
※如何防範黑客攻擊網站?