Byte[ ]和Base64之間的轉(zhuǎn)換(加密)

?Python 2.7中的str是字節(jié)串走贪,而Python 3.x中的str是字符串

經(jīng)常聽到有人說“base64加密”允乐,其實base64并不能用于數(shù)據(jù)加密顶捷,它也不是為了純粹的數(shù)據(jù)加密而生的捕仔,它的出現(xiàn)是為了解決不可見字符串的網(wǎng)絡傳輸和數(shù)據(jù)保存問題喘鸟。因為键畴,用base64對數(shù)據(jù)進行轉(zhuǎn)換的過程不能成為“加密”與“解密”最盅,只能成為“編碼”與“解碼”突雪。

Base64是一種用64個字符來表示任意二進制數(shù)據(jù)的方法,它是一種通過查表對二進制數(shù)據(jù)進行編碼的方法涡贱,不能用于數(shù)據(jù)加密咏删。base64最初的出現(xiàn)時為了能夠正確的傳輸郵件數(shù)據(jù),因為郵件中的附件(比如圖片)的二進制數(shù)中可能存在不可見字符(ascii碼中128-255之間的值是不可見字符)问词,比如我們嘗試用記事本或其他文本編輯器打開一個圖片時督函,通常都會看到一大堆亂碼,這些亂碼就是不可見字符激挪。由于早期的一些網(wǎng)絡設(shè)備和網(wǎng)絡協(xié)議是無法正確識別這些字符的辰狡,這就可能在數(shù)據(jù)傳輸時出現(xiàn)各種無法預知的問題。base64的作用就是把含有不可見字符的信息用可見字符來表示(Ascii碼中0-127之間的值是可見字符)垄分,從而解決這個問題

Base64.encodeToString(str.getBytes())

它其實是使用 a-z, A-Z, 0-9, /宛篇, + 這64個字符來進行編碼的,0-63分別對應用前面的64個字符來表示薄湿。

其編碼結(jié)果的特點是:末尾可能有1個或者2個 = :

Pz8/aGVsbG8vc2FzZXdyZWRmZGQ+Pj4uIEhlbGxvIOS4lueVjO+8gQ==

其原因是叫倍,Base64編碼算法是每次處理byte[]數(shù)組中三個連續(xù)的byte,那么就有可能 byte[] 數(shù)組不是3的整數(shù)倍豺瘤,那么余數(shù)就有可能是1吆倦,或者2,所以就分別使用 一個 = 和兩個 = 來進行填充坐求。

所以:

Base64的編碼其特點就是可能末尾有一個或者兩個=蚕泽,可能含有 / 和 + 字符。

16進制編碼的特點是全部由'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' 這16個字符組成瞻赶,不含其他字母赛糟。

加密算法都是對byte[]進行變換和運算。

有 String 轉(zhuǎn)換得到的 byte[] 就一定可以使用原來的編碼方案轉(zhuǎn)換成原來的 String,

但是加密的結(jié)果 byte[] 卻不能用任何字符編碼方案得到String, 一般使用16進制編碼成String砸逊,然后進行存儲或者比較璧南。

base64.b64encode(s, altchars=None)對二進制數(shù)據(jù)(字節(jié)串)s通過base64進行編碼,返回編碼后的字節(jié)串

base64.b64decode(s, altchars=None, validate=False)對通過base64編碼的字節(jié)對象或ASCII字符串s進行解碼师逸,返回解碼后的字節(jié)串

base64.urlsafe_b64encode(s)與b64encode()函數(shù)不同的是司倚,它會把標準Base64編碼結(jié)果中的字符'+'和字符'/'分別替換成字符'-'和字符'_'。

base64.urlsafe_b64decode(s)解碼通過base64.urlsafe_b64encode()函數(shù)編碼的字節(jié)對象或ASCII字符串s篓像。


當判斷字符串是否是base64加密過的动知,或者要將字符串進行加密。

特別是爬蟲過程中员辩,js中經(jīng)常帶有base64進行加密解密的操作盒粮,只要知道整個邏輯,以后可以直接進行調(diào)用奠滑。

def jiemi_base64(): # 解密base64

? ? data = 'eyduYW1lJzona2trJywnYWdlJzoyMn0='

? ? # data= '''{'aa':'bb'}'''

? ? missing_padding = 4- len(data) %4

? ? if missing_padding:

? ? ? ? data += '=' * missing_padding

? ? print(base64.b64decode(data))

? ? print(type(base64.b64decode(data)))

? ? #b"{'name':'kkk','age':22}"

? ? #<class 'bytes'>

def jiami_base64(): # 加密base64

? ? data= "{'name':'kkk','age':22}"

? ? print(base64.b64encode(data.encode()))? # data必須是bytes類型丹皱,如果是字符串妒穴,則通過encode()轉(zhuǎn)換

? ? # b'eyduYW1lJzona2trJywnYWdlJzoyMn0='

if __name__ == '__main__':

? ? # jiami_base64()

? ? jiemi_base64()



由于‘z’后面bit位都是0,base64約定以‘=’代替

上述還可以寫為:

以24位摊崭,8位分割表示:

01111010 ? ? 00000000 ? ? 00000000

以24位讼油,6位分割表示:

011110 ? ?100000 ? ?000000 ? ?000000

6位如何以8位形式表示,在前面補0呢簸,即:

0001 1110 ? ?0010 0000 ? ?0000 0000 ? ?0000 0000

得到上述結(jié)果

因此矮台,‘z’經(jīng)過base64編碼得到:‘eg==’

用python驗證一下:

>>> base64.b64encode("z")

'eg=='

---------------------

作者:zhubaoJay

來源:CSDN

原文:https://blog.csdn.net/zhubaoJay/article/details/72957135

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接根时!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瘦赫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子啸箫,更是在濱河造成了極大的恐慌耸彪,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忘苛,死亡現(xiàn)場離奇詭異蝉娜,居然都是意外死亡,警方通過查閱死者的電腦和手機扎唾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門召川,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胸遇,你說我怎么就攤上這事荧呐。” “怎么了纸镊?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵倍阐,是天一觀的道長。 經(jīng)常有香客問我逗威,道長峰搪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任凯旭,我火速辦了婚禮概耻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罐呼。我一直安慰自己鞠柄,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布嫉柴。 她就那樣靜靜地躺著厌杜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪计螺。 梳的紋絲不亂的頭發(fā)上夯尽,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天侧馅,我揣著相機與錄音,去河邊找鬼呐萌。 笑死,一個胖子當著我的面吹牛谊娇,可吹牛的內(nèi)容都是我干的肺孤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼济欢,長吁一口氣:“原來是場噩夢啊……” “哼赠堵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起法褥,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤茫叭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后半等,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揍愁,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年杀饵,在試婚紗的時候發(fā)現(xiàn)自己被綠了莽囤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡切距,死狀恐怖朽缎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谜悟,我是刑警寧澤话肖,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站葡幸,受9級特大地震影響最筒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜礼患,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一是钥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缅叠,春花似錦悄泥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至领曼,卻和暖如春鸥鹉,著一層夾襖步出監(jiān)牢的瞬間蛮穿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工毁渗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留践磅,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓灸异,卻偏偏與公主長得像府适,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子肺樟,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 字符是用戶可以讀寫的最小單位么伯。計算機所能支持的字符組成的集合疟暖,就叫做字符集。字符集通常以二維表的形式存在田柔。二維表的...
    劉惜有閱讀 8,113評論 2 14
  • 之前的項目中接觸過一些加密的方法俐巴,也沒有太仔細的進行記錄和研究。最近在寫SDK時凯楔,加密模塊的占比相當之大窜骄;借此時機...
    過半_e764閱讀 573評論 0 0
  • 編碼問題一直困擾著開發(fā)人員,尤其在 Java 中更加明顯摆屯,因為 Java 是跨平臺語言邻遏,不同平臺之間編碼之間的切換...
    x360閱讀 2,480評論 1 20
  • 概述 之前一直對加密相關(guān)的算法知之甚少,只知道類似DES虐骑、RSA等加密算法能對數(shù)據(jù)傳輸進行加密准验,且各種加密算法各有...
    Henryzhu閱讀 3,019評論 0 14
  • /**ios常見的幾種加密方法: 普通的加密方法是講密碼進行加密后保存到用戶偏好設(shè)置( [NSUserDefaul...
    彬至睢陽閱讀 2,931評論 0 7