一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Base64加解密算法原理與編程實(shí)現(xiàn)

 悟靜 2012-11-05

網(wǎng)絡(luò)傳輸——Base64詳解

自從引用以來(lái),Base64編碼的標(biāo)準(zhǔn)極普及為的迅速。不過(guò),把文件作為附件通過(guò)網(wǎng)際郵件擴(kuò)充協(xié)議(MIME)傳送時(shí),Base64是標(biāo)準(zhǔn)的編碼標(biāo)準(zhǔn)。然而,幾乎所有的電子郵件客戶端都是用MIME發(fā)送文件(以附件形式)的,這就意味著大多數(shù)的電子郵件客戶端使用Base64對(duì)文件編碼后通過(guò)網(wǎng)絡(luò)傳輸。格式如下:

Content-Transfer-Encodingbase64 Gb2312

這種傳輸格式又被稱為U-t-UUnix to Unix)傳輸協(xié)議,能兼容大多數(shù)的硬件設(shè)備并基于其上進(jìn)行無(wú)損字節(jié)傳輸。但是缺點(diǎn)在于是,使用此種格式會(huì)使文件的大小增加百分之四十左右。

除了作為MIME的默認(rèn)編碼標(biāo)準(zhǔn),base64編碼也廣泛用于其他領(lǐng)域。一個(gè)常見(jiàn)的例子是用于網(wǎng)絡(luò)服務(wù)器完成基于HTTP的基本認(rèn)證。當(dāng)服務(wù)器想限制訪問(wèn)某些文件時(shí),通過(guò)使用基于HTTP的基本認(rèn)證系統(tǒng),便可以對(duì)這些文件進(jìn)行密碼保護(hù)。而基本認(rèn)證使用Base64編碼標(biāo)準(zhǔn)對(duì)用戶名和密碼進(jìn)行編碼。這樣,黑客們使用TCP通過(guò)端口連接ESMTP服務(wù)器時(shí),手動(dòng)輸入量就會(huì)大大增加。

盡管Base64編碼受到廣泛的支持和應(yīng)用,但卻是當(dāng)今最弱的編碼標(biāo)準(zhǔn)之一,通過(guò)以下步驟就可以輕易地進(jìn)行逆向工程。不僅僅是算法上的容易逆向,因?yàn)樵诰W(wǎng)絡(luò)上Base64用純文本形式發(fā)送密碼,使得Base64加密文本很容易受到sniffer程序的嗅探。

編碼程序如下:

1、  將要加密的文本的每個(gè)字符轉(zhuǎn)換成標(biāo)準(zhǔn)的ASCII十進(jìn)制碼。

2、  通過(guò)任何一種方式(手算、機(jī)器算、對(duì)照表格)將這部分十進(jìn)制編碼轉(zhuǎn)換成二進(jìn)制(文章最后附有轉(zhuǎn)換表)編碼。每個(gè)十進(jìn)制碼都對(duì)應(yīng)器等價(jià)的八位二進(jìn)制數(shù)值。

3、  將這部分二進(jìn)制數(shù)連結(jié)到一起,產(chǎn)生一串二進(jìn)制數(shù)。

4、  將這一大片的二進(jìn)制字符串分割成每6個(gè)字符為一部分的小塊。

5、  通過(guò)任何一種方式(手算、機(jī)器算、對(duì)照表格)將這部分6字符的小塊分別轉(zhuǎn)換成相應(yīng)的等價(jià)十進(jìn)制數(shù)。

6、  通過(guò)Base64表轉(zhuǎn)換成Base64編碼。

Base64編碼轉(zhuǎn)換表如下:

十進(jìn)制

編碼

十進(jìn)制

編碼

十進(jìn)制

編碼

十進(jìn)制

編碼

0

A

16

Q

32

g

48

w

1

B

17

R

33

h

49

x

2

C

18

S

34

i

50

y

3

D

19

T

35

j

51

z

4

E

20

U

36

k

52

0

5

F

21

V

37

l

53

1

6

G

22

W

38

m

54

2

7

H

23

X

39

n

55

3

8

I

24

Y

40

o

56

4

9

J

25

Z

41

p

57

5

10

K

26

a

42

q

58

6

11

L

27

b

43

r

59

7

12

M

28

c

44

s

60

8

13

N

29

d

45

t

61

9

14

O

30

e

46

u

62

+

15

P

31

f

47

v

63

/

例如:mne,通過(guò)ASCII字符表轉(zhuǎn)化為是進(jìn)制值為:m109,n,110e、101.合起來(lái)就是:109110101.轉(zhuǎn)化為二進(jìn)制就是:0110 1101 0110 1110 0110 0101。將它們分成六個(gè)字為一段:011011 010110 111001 100101。而他們對(duì)應(yīng)的十進(jìn)制字符分別是:27 22 57 37Base64等價(jià)值就是:27、b,22、w,57、5,37、1,也就是說(shuō)mneBase64編碼是bw51

需要注意的是:如果被加密的字符串每3個(gè)一組,還剩12個(gè)字符,使用特殊字符“=”補(bǔ)齊Base64成為4個(gè)字。

知道了加密方式,要逆向就很簡(jiǎn)單了。將對(duì)應(yīng)的Base64值轉(zhuǎn)換為十進(jìn)制,再通過(guò)計(jì)算轉(zhuǎn)換成二進(jìn)制編碼。將這一串碼分為81組,得到十進(jìn)制碼,最后再等價(jià)到相應(yīng)的ASCII編碼即可。

1ASCII編碼表(部分)

二進(jìn)制

十進(jìn)制

十六進(jìn)制

縮寫(xiě)/字符

解釋

0000 0000

0

00

NUL (null)

空字符

0000 0001

1

01

SOH (start of handing)

標(biāo)題開(kāi)始

0000 0010

2

02

STX (start of text)

正文開(kāi)始 

0000 0011

3

03

ETX (end of text)

正文結(jié)束

0000 0100

4

04

EOT (end of transmission)

傳輸結(jié)束

0000 0101

5

05

ENQ (enquiry)

請(qǐng)求

0000 0110

6

06

ACK (acknowledge)

收到通知

0000 0111

7

07

BEL (bell)

響鈴

0000 1000

8

08

BS (backspace)

退格

0000 1001

9

09

HT (horizontal tab)

水平制表符

0000 1010

10

0A

LF (NL line feed, new line)

換行鍵

0000 1011

11

0B

VT (vertical tab)

垂直制表符

0000 1100

12

0C

FF (NP form feed, new page)

換頁(yè)鍵

0000 1101

13

0D

CR (carriage return)

回車(chē)鍵

0000 1110

14

0E

SO (shift out)

不用切換

0000 1111

15

0F

SI (shift in)

啟用切換

0001 0000

16

10

DLE (data link escape)

數(shù)據(jù)鏈路轉(zhuǎn)義

0001 0001

17

11

DC1 (device control 1)

設(shè)備控制1

0001 0010

18

12

DC2 (device control 2)

設(shè)備控制2

0001 0011

19

13

DC3 (device control 3)

設(shè)備控制3

0001 0100

20

14

DC4 (device control 4)

設(shè)備控制4

0001 0101

21

15

NAK (negative acknowledge)

拒絕接收

0001 0110

22

16

SYN (synchronous idle)

同步空閑

0001 0111

23

17

ETB (end of trans. block)

傳輸塊結(jié)束

0001 1000

24

18

CAN (cancel)

取消

0001 1001

25

19

EM (end of medium)

介質(zhì)中斷

0001 1010

26

1A

SUB (substitute)

替補(bǔ)

0001 1011

27

1B

ESC (escape)

溢出

0001 1100

28

1C

FS (file separator)

文件分割符

0001 1101

29

1D

GS (group separator)

分組符

0001 1110

30

1E

RS (record separator)

記錄分離符

0001 1111

31

1F

US (unit separator)

單元分隔符

2:下列Perl腳本將會(huì)自動(dòng)幫你做解密:

Use MIME::Base64;

Print decode_base64(“Insert Text here”);

 

3:使用Java腳本實(shí)現(xiàn)解密(代碼):

<script type="text/javascript"> 

var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 

var base64DecodeChars = new Array( 

 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 

 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 

 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 

 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, 

 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 

 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, 

 -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 

 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1); 

 

function base64Encode(str) { 

 var out, i, len; 

 var c1, c2, c3; 

 

 len = str.length; 

 i = 0; 

 out = "";  

 while(i < len) { 

 c1 = str.charCodeAt(i++) & 0xff; 

 if(i == len) 

 { 

 out += base64EncodeChars.charAt(c1 >> 2); 

 out += base64EncodeChars.charAt((c1 & 0x3) << 4); 

 out += "=="; 

 break; 

 } 

 c2 = str.charCodeAt(i++); 

 if(i == len) 

 {  

 out += base64EncodeChars.charAt(c1 >> 2); 

 out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)); 

 out += base64EncodeChars.charAt((c2 & 0xF) << 2); 

 out += "="; 

 break; 

 } 

 c3 = str.charCodeAt(i++); 

 out += base64EncodeChars.charAt(c1 >> 2); 

 out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4)); 

 out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6)); 

 out += base64EncodeChars.charAt(c3 & 0x3F); 

 } 

 return out; 

} 

 

function base64Decode(str) { 

 var c1, c2, c3, c4; 

 var i, len, out; 

 

 len = str.length; 

 i = 0; 

 out = ""; 

 while(i < len) { 

 /* c1 */ 

 do { 

 c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; 

 } while(i < len && c1 == -1); 

 if(c1 == -1) 

 break; 

 

 /* c2 */ 

 do { 

 c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; 

 } while(i < len && c2 == -1); 

 if(c2 == -1) 

 break; 

 

 out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); 

 

 /* c3 */ 

 do { 

 c3 = str.charCodeAt(i++) & 0xff; 

 if(c3 == 61) 

 return out; 

 c3 = base64DecodeChars[c3]; 

 } while(i < len && c3 == -1); 

 if(c3 == -1) 

 break; 

 

 out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)); 

 

 /* c4 */ 

 do { 

 c4 = str.charCodeAt(i++) & 0xff; 

 if(c4 == 61) 

 return out; 

 c4 = base64DecodeChars[c4]; 

 } while(i < len && c4 == -1); 

 if(c4 == -1) 

 break; 

 out += String.fromCharCode(((c3 & 0x03) << 6) | c4); 

 } 

 return out; 

} 

alert("原文:"+sTemp+"\n加密:"+base64Encode(sTemp)+"\n解密:"+base64Decode(base64Encode(sTemp)));

alert("原文:"+sTemp+"\n加密:"+base64Encode(sTemp)+"\n解密:"+base64Decode(base64Encode(sTemp))); 

</script>

 

好東西一般都放在最后的位置……

 

很高興你能看到這個(gè)文檔,說(shuō)明你離過(guò)關(guān)又近了一步。

TipZGIvc2lsaWMubWRi 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多

    欧美自拍系列精品在线| 午夜福利大片亚洲一区| 国产精品视频一区麻豆专区| 色偷偷偷拍视频在线观看| 日韩精品免费一区三区| 欧美日韩在线第一页日韩| 国内外免费在线激情视频| 国产精品一区二区视频大全| 婷婷九月在线中文字幕| 午夜成年人黄片免费观看| 精品久久综合日本欧美| 黑人巨大精品欧美一区二区区| 激情内射日本一区二区三区| 久久机热频这里只精品| 99少妇偷拍视频在线| 婷婷开心五月亚洲综合| 日本在线高清精品人妻| 日韩一本不卡在线观看| 欧美日韩中国性生活视频| 欧美精品在线播放一区二区| 国产乱淫av一区二区三区| 日韩高清中文字幕亚洲| 加勒比人妻精品一区二区| 亚洲天堂久久精品成人| 又黄又爽禁片视频在线观看| 成年女人下边潮喷毛片免费| 日韩日韩日韩日韩在线| 欧美日韩一区二区综合| 欧美日韩视频中文字幕| 国产精品欧美在线观看| 亚洲精品日韩欧美精品| 亚洲一区二区三区四区性色av| 久久精品久久精品中文字幕| 日韩欧美精品一区二区三区| 九九蜜桃视频香蕉视频| 特黄大片性高水多欧美一级| 国产成人在线一区二区三区| 欧美自拍偷自拍亚洲精品| 亚洲日本久久国产精品久久| 国产av熟女一区二区三区四区| 熟妇人妻av中文字幕老熟妇|