HTTP報文URL解碼實現

HTTP報文URL解碼實現

來自專欄信息安全入門筆記16 人贊了文章

URL編碼的姐妹篇 HTTP報文URL編碼實現 .

Content-Type指定為application/x-www-form-urlencoded 的時候

我們提交的數據編碼形式是通過&連接 比如key="<hack>"&value="ailx10"

同時<hack>ailx10會進行URL編碼

key=%3Chack%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] = A

HEX2DEC[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技術被黑客利用?
電腦課上如何黑進老師的電腦。控制全班,甚至老師的電腦?
如何防範黑客攻擊網站?

TAG:前端開發 | Web開發 | 黑客Hacker |