久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Java加密與解密

 偷樂圖書管 2014-06-14

1 Base64算法的由來

    Base64算法最早應(yīng)用于解決電子郵件傳輸?shù)膯栴}。早期,,由于“歷史問題”,,電子郵件只允許ASCII碼字符,如果郵件中包含非ASCII碼字符,,當(dāng)它通過有“歷史問題”的網(wǎng)關(guān)時(shí),,這個(gè)網(wǎng)關(guān)會(huì)對(duì)該字符的二進(jìn)制位進(jìn)行調(diào)整,即將其8位二進(jìn)制碼的最高位置0,,這樣用戶收到的郵件就會(huì)是一封亂碼,。為了解決這個(gè)問題,,產(chǎn)生了Base64算法。

 

2 Base64算法的定義

    RFC 2045中定義:Base64內(nèi)容傳輸編碼是一種以8位字節(jié)序列組合的描述形式,,這種形式不易被人直接識(shí)別,。

    RFC 2045中規(guī)定,在電子郵件中,,每行為76個(gè)字符,,每行末需添加一個(gè)回車換行符("\r\n"),不管每行是否夠76個(gè)字符,,都要添加一個(gè)回車換行符,。不過在實(shí)際應(yīng)用中,根據(jù)實(shí)際需要,,這一要求往往被忽略,。

 

    Base64算法的轉(zhuǎn)換方式類似于古典加密算法里的單表置換算法 。RFC 2045中給出了Base64的字符映射表,,如下圖所示,。

 

 

    這張字符映射表中,Value是十進(jìn)制編碼,,Encoding是字符,,共映射了64個(gè)字符,這也是Base64算法命名的由來,。映射表的最后一個(gè)字符“=”是用來補(bǔ)位的,。

    Base64算法的編碼和解碼操作可用作加密解密,但是Base64的字符映射表是公開的,,因此并不能叫做加密算法,。

    Url Base64算法是由Base64算法衍生出來的,用于在http請(qǐng)求中傳遞二進(jìn)制數(shù)據(jù),。將Base64中的“+”,、“/”替換為“-”和“_”符號(hào),對(duì)于補(bǔ)位符“=”,,Bouncy Castle使用“.”替換,,而Commons Codec則不使用補(bǔ)位符。

 

 

3 基本原理

    Base64算法主要是將給定的字符以字符編碼(如ASCII,、UTF-8等)對(duì)應(yīng)的十進(jìn)制數(shù)為基準(zhǔn),,做編碼操作:

  1.     將給定的字符串以字符為單位,轉(zhuǎn)換為對(duì)應(yīng)的字符編碼,。
  2.     將獲得的字符編碼轉(zhuǎn)換為二進(jìn)制串,。
  3.     將獲得的二進(jìn)制串做分組轉(zhuǎn)換操作,,每3個(gè)8位的二進(jìn)制串為一組,,將這樣的一組再轉(zhuǎn)換為4個(gè)6位二進(jìn)制串,,不足6位時(shí)低位補(bǔ)0。
  4.     對(duì)每組4個(gè)6位二進(jìn)制串補(bǔ)位,,即向6位二進(jìn)制串的高位補(bǔ)兩個(gè)0,,生成4個(gè)8位二進(jìn)制串。
  5.     將獲得的4-8二進(jìn)制碼轉(zhuǎn)換為十進(jìn)制碼,。
  6.     將獲得的十進(jìn)制碼用Base64字符映射表中對(duì)應(yīng)的字符替換,。

    經(jīng)過Base64編碼后的數(shù)據(jù)會(huì)比原始數(shù)據(jù)略長,為原來的4/3倍,,編碼后的字符數(shù)是4的倍數(shù),。

    編碼后的字符串最多有2個(gè)補(bǔ)位的“=”,因?yàn)樵紨?shù)據(jù)的二進(jìn)制串的分組是以3個(gè)8位為一組的,,余數(shù) = 原始數(shù)據(jù)字節(jié)數(shù) mod 3,,余數(shù)只能為0、1,、2,。如果余數(shù)為0,3個(gè)8位轉(zhuǎn)換為4個(gè)6位,,高位補(bǔ)0之后是4個(gè)8位,,則不需要補(bǔ)位符;如果余數(shù)為1,,1個(gè)8位只能轉(zhuǎn)換為2個(gè)6位,,高位補(bǔ)0之后是2個(gè)8位,為了讓編碼之后的字符數(shù)是4的倍數(shù),,要補(bǔ)兩個(gè)補(bǔ)位符,;同理,如果余數(shù)為2,,要補(bǔ)一個(gè)補(bǔ)位符,。

    ASCII碼進(jìn)行Base64編碼的例子如下圖,字符“A”編碼之后的字符串為“QQ==”,。

    非ASCII碼如GBK,、UTF-8等編碼,一個(gè)字符包含多個(gè)字節(jié),,如UTF-8用3個(gè)字節(jié)表示一個(gè)漢字,,GBK用2個(gè)字節(jié)表示一個(gè)漢字。以字符串“密”為例,,對(duì)應(yīng)的UTF-8編碼是-27,、-81、-122,,用Base64編碼如下圖,,編碼后的字符串為“5a+G”,。

 

4 Base64算法的Java實(shí)現(xiàn)和使用

    Java API中沒有Base64的實(shí)現(xiàn),實(shí)際上Sun也有Base64算法的實(shí)現(xiàn),,但是沒有公布,。Bouncy Castle提供了一般Base64算法的實(shí)現(xiàn),Commons Codec提供了基于RFC 2045相關(guān)定義的Base64算法實(shí)現(xiàn),。

    Bouncy Castle遵循的是一般Base64算法,,就是根據(jù)字符映射表做了編碼轉(zhuǎn)換。Commons Codec中既支持RFC 2045定義的Base64算法,,也支持一般的Base64算法,。這兩種的差異是RFC 2045定義的算法要求在編碼后的字符串中換行和末尾添加回車換行符。

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(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)論公約

    類似文章 更多