常見的一些編碼

2021-09-14 02:38:56 字數 3368 閱讀 9477

對於密碼學來說編碼並不是密碼,但也是很常見的使用了,因此在這裡簡單的總結一下各種編碼。

1.ascii

對於ascii來說其前1~31為非列印字元,後面的才是列印字元。可以說是用的很廣泛的一種一種編碼了。例如在sql注入中我們都會經常遇到他,在各種語言中都會遇到為其設定的函式,等等。。

廢話不說上圖:

可以看到,其前1~31為非列印字元。。

2.base64編碼/base32/base16等等

也是一種常用的編碼方式。

base64/32/16則是分別將對應的8個位元組轉換為6、5、4個位元組

舉個例子:

對於"mikasa"這個字串,對應的ascii值為

77 105 107 97 115 97

對應的二進位制數為:

01001101 01101001 01101011 01100001 01110011 01100001

那麼根據base64將八位的位元組分為6位一組後

010011 010110 100101 101011 011000 010111 001101 100001

之後再補位成8位

00010011 00010110 00100101 00101011 00011000 00010111 00001101 00100001

轉換為10進製為

19 22 37 43 24 23 13 33

查下對於base64的對照表(一共有64個,從0開始的,分別是a-z a-z 0-9 還有 + 和 /)注意沒有=這個是填充字元的

查表得出結果為

twlryxnh

我們用hackbar實驗一下

確實是這樣,由此可以反向推導base64解碼的時候就是4個字元一組解碼。

因此就會有了死亡退出這個漏洞,具體可以看一下我的另乙個文章死亡退出

到此我們也許還有疑問那我們常見的後面的=是幹什麼的呢?

接下來**一下

就拿8比較

換為ascii為56

轉換為二進位制位

111000

補全為00111000發現轉碼的時候不夠24位因此就會在後面加上0補到24位(自我理解)

00111000+16個0

然後真正有效的是前兩個6位的二進位制(可能因為補全後有8個字元把,然後後面的不足也包含了),也就是001110 和000000至於

查表得到oa,因為是將3個字元轉換為4個字元因此為了滿足條件在後面加上兩個==

結果為oa==

hackbar實驗一下:

好了關於base64的原理就到了這裡了。

3.shellcode編碼

這個比較簡單,就是將原來的字元轉換為ascii後再以16進製制輸出(前面加上\x)

但是神奇的是這種編碼經常用於在逆向上面,對於逆向的理解不深因此不能做出相關實驗,需要一定的彙編底子,具體可以參考shellcode

例如"mikasa"

對應ascii值為

77 105 107 97 115 97

換為16進製為

4d 69 6b 61 73 61

則其對應的為\x4d\x69\x6b\x61\x73\x61

沒有找到對應的環境實驗。。。

4.quoted-printable編碼

這種編碼一般常見在於郵件中

原理如下:

對於處於在可列印字元中的字元,即ascii在33~126的值可以直接用其原始值代替

比如mikasa,編碼後就為mikasa(當然也可以如後文用=xx的形式代表)

但是不可列印的(例如空格)ascii為32,

經過編碼後就為=20(就是"="加上16進製制後的ascii值)

參考鏈結

5.xxencode

這個跟base64大約是差不多的,但是有一點就是所對應的對照表是不同的。

xxencode是 + - 0-9 a-z a-z ,分別對應的是0~63

還有一點就是對於如果以6位元組分組不可以的話,就會在後面補零,一直到符合條件為止。

總結----大致與base64相同

6.uuencode編碼

最早在linux郵件系統**現

也是跟base64相同的原理

將3個位元組將(即24位),以6個位元組分為4組,然後不足的後面補零,然後將其對應的ascii加上32,最後在還原成字元

注意:以為對於6個位元組補零來說最大的數字就是63,最小就是0,加上32最小就是32(空格)最大為_下劃線,因此都可以列印出來

7.url編碼

就是將其對應的ascii以16進製制的形式轉換,在前面加上%,當然對於字母和一些其他字元(@,;)等可以不需要轉碼,其他的都需要轉成這種形式

例如空格(ascii為32),16進製為20,因此url為%20

8.unicode編碼

有四種形式

16進製制形式有:&x \u \u+三種

就是將字元對應的ascii轉換成16進製制,然後再弄到後面

例如空格(ascii為32)

&x20 \u20 \u+20

十進位制形式有:&

&+對應的ascii

例如&32(空格)

9.escape/unescape編碼

這個大致也是相同的(但是不會對字母、數字、以及一些特殊字元編碼)

格式為

%u+對應ascii的16進製制        支援中文
10.html實體編碼

將一些特殊的字元轉變成為實體字元

參考這裡

11.摩斯密碼

對應字元代替

在ctf中有可能將其替換為其他的字元

如何識別一些常見的編碼形式

url 編碼 url編碼就是乙個字元ascii碼的十六進製制。不過稍微有些變動,需要在前面加上 比如 它的ascii碼是92,92的十六進製制是5c,所以 的url編碼就是 5c。那麼漢字的url編碼呢?很簡單,看例子 胡 的ascii碼是 17670,十六進製制是bafa,url編碼是 ba fa...

一些編碼規範

先判斷是否為空list null list.size 0提示條件裡不要有感嘆號!客戶很反感。字串加trim 判斷。去掉前邊的空格。儘量減少對變數的重複計算 明確乙個概念,對方法的呼叫,即使方法中只有一句語句,也是有消耗的,包括建立棧幀 呼叫方法時保護現場 呼叫方法完畢時恢復現場等。所以例如下面的操作...

一些常見的術語

1.什麼是cti?電信網路是世界上覆蓋範圍最大的通訊網路,計算機通訊技術也以ip技術為代表,形成了另乙個覆蓋全球的傳輸資料的巨大網路,兩者的融合極大地提高了彼此的通訊能力和處理能力,由此形成計算機 整合技術 computer telephony integration 即cti,國外將其統稱為ct ...