欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Base64加解密算法原理與編程實(shí)現

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

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

Content-Transfer-Encodingbase64 Gb2312

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

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

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

編碼程序如下:

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

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

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

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

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

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

Base64編碼轉換表如下:

十進(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字符表轉化為是進(jìn)制值為:m、109,n,110,e、101.合起來(lái)就是:109110101.轉化為二進(jìn)制就是:0110 1101 0110 1110 0110 0101。將它們分成六個(gè)字為一段:011011 010110 111001 100101。而他們對應的十進(jìn)制字符分別是:27 22 57 37。Base64等價(jià)值就是:27、b,22、w,57、5,37、1,也就是說(shuō)mneBase64編碼是bw51。

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

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

1ASCII編碼表(部分)

二進(jìn)制

十進(jìn)制

十六進(jìn)制

縮寫(xiě)/字符

解釋

0000 0000

0

00

NUL (null)

空字符

0000 0001

1

01

SOH (start of handing)

標題開(kāi)始

0000 0010

2

02

STX (start of text)

正文開(kāi)始 

0000 0011

3

03

ETX (end of text)

正文結束

0000 0100

4

04

EOT (end of transmission)

傳輸結束

0000 0101

5

05

ENQ (enquiry)

請求

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)

數據鏈路轉義

0001 0001

17

11

DC1 (device control 1)

設備控制1

0001 0010

18

12

DC2 (device control 2)

設備控制2

0001 0011

19

13

DC3 (device control 3)

設備控制3

0001 0100

20

14

DC4 (device control 4)

設備控制4

0001 0101

21

15

NAK (negative acknowledge)

拒絕接收

0001 0110

22

16

SYN (synchronous idle)

同步空閑

0001 0111

23

17

ETB (end of trans. block)

傳輸塊結束

0001 1000

24

18

CAN (cancel)

取消

0001 1001

25

19

EM (end of medium)

介質(zhì)中斷

0001 1010

26

1A

SUB (substitute)

替補

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í)現解密(代碼):

<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 

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
JavaScript Base64 實(shí)現 通過(guò) URL 傳遞 base64 編碼 中文參數的問(wèn)題_和瀏覽器判斷
JavaScript Base64編碼和解碼
JavaScript Base64編碼和解碼,實(shí)現URL參數傳遞
js base64
Delphi中ScriptControl的高級應用(二)
正則表達式驗證大全
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久