日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(转)base64编码(严格说来,base64不算作加解密算法)

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (转)base64编码(严格说来,base64不算作加解密算法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【README】

1.本文轉自:

Java base64加密解密 - xuwc - 博客園參考: https://www.cnblogs.com/luguo3000/p/3940197.html https://blog.csdn.net/jiahao1186/article/detailhttps://www.cnblogs.com/xuwc/p/14058183.htmlhttps://zh.wikipedia.org/wiki/Base64https://zh.wikipedia.org/wiki/Base642.嚴格說來,base64是做編碼用的,可逆,不算做加解密算法;

3.base64的作用

有些網絡傳送渠道并不支持所有的字節,例如傳統的郵件只支持可見字符的傳送;為了支持所有字節(包括可見與不可見),都可以通過網絡傳輸,需要對字節的bit位進行重新編碼形成新的可見字節(這一步是可逆的),在使用時進行解碼即可;

base64的編碼與解碼就是做了上述事情;base64編碼后的字節根本不能算作秘密,因為它的設計思想是吧所有字節轉為可見字符(字節),并不是為了加密用的


【1】base64編碼介紹

開發者對Base64編碼肯定很熟悉,是否對它有很清晰的認識就不一定了。實際上Base64已經簡單到不能再簡單了,如果對它的理解還是模棱兩可實在不應該。大概介紹一下Base64的相關內容,花幾分鐘時間就可以徹底理解它。文章下邊貼了一個Base64的編解碼器,方便閱讀文章的同時來實驗。

  一. Base64編碼由來

  為什么會有Base64編碼呢?因為有些網絡傳送渠道并不支持所有的字節,例如傳統的郵件只支持可見字符的傳送,像ASCII碼的控制字符就不能通過郵件傳送。這樣用途就受到了很大的限制,比如圖片二進制流的每個字節不可能全部是可見字符,所以就傳送不了。最好的方法就是在不改變傳統協議的情況下,做一種擴展方案來支持二進制文件的傳送。把不可打印的字符也能用可打印字符來表示,問題就解決了。Base64編碼應運而生,Base64就是一種基于64個可打印字符來表示二進制數據的表示方法。

  二. Base64編碼原理

  看一下Base64的索引表,字符選用了"A-Z、a-z、0-9、+、/" 64個可打印字符。數值代表字符的索引,這個是標準Base64協議規定的,不能更改。64個字符用6個bit位就可以全部表示,一個字節有8個bit位,剩下兩個bit就浪費掉了,這樣就不得不犧牲一部分空間了。這里需要弄明白的就是一個Base64字符是8個bit,但是有效部分只有右邊的6個bit,左邊兩個永遠是0。

  那么怎么用6個有效bit來表示傳統字符的8個bit呢?8和6的最小公倍數是24,也就是說3個傳統字節可以由4個Base64字符來表示,保證有效位數是一樣的,這樣就多了1/3的字節數來彌補Base64只有6個有效bit的不足。你也可以說用兩個Base64字符也能表示一個傳統字符,但是采用最小公倍數的方案其實是最減少浪費的。結合下邊的圖比較容易理解。Man是三個字符,一共24個有效bit,只好用4個Base64字符來湊齊24個有效位。紅框表示的是對應的Base64,6個有效位轉化成相應的索引值再對應Base64字符表,查出"Man"對應的Base64字符是"TWFU"。說到這里有個原則不知道你發現了沒有,要轉換成Base64的最小單位就是三個字節,對一個字符串來說每次都是三個字節三個字節的轉換,對應的是Base64的四個字節。這個搞清楚了其實就差不多了。

? ? ? ? ?

  但是轉換到最后你發現不夠三個字節了怎么辦呢?愿望終于實現了,我們可以用兩個Base64來表示一個字符或用三個Base64表示兩個字符,像下圖的A對應的第二個Base64的二進制位只有兩個,把后邊的四個補0就是了。所以A對應的Base64字符就是QQ。上邊已經說過了,原則是Base64字符的最小單位是四個字符一組,那這才兩個字符,后邊補兩個"="吧。其實不用"="也不耽誤解碼,之所以用"=",可能是考慮到多段編碼后的Base64字符串拼起來也不會引起混淆。由此可見Base64字符串只可能最后出現一個或兩個"=",中間是不可能出現"="的。下圖中字符"BC"的編碼過程也是一樣的。

  三. 總結  

  說起Base64編碼可能有些奇怪,因為大多數的編碼都是由字符轉化成二進制的過程,而從二進制轉成字符的過程稱為解碼。而Base64的概念就恰好反了,由二進制轉到字符稱為編碼,由字符到二進制稱為解碼。

  Base64編碼主要用在傳輸、存儲、表示二進制等領域,還可以用來加密,但是這種加密比較簡單,只是一眼看上去不知道什么內容罷了,當然也可以對Base64的字符序列進行定制來進行加密。

  Base64編碼是從二進制到字符的過程,像一些中文字符用不同的編碼轉為二進制時,產生的二進制是不一樣的,所以最終產生的Base64字符也不一樣。例如"上網"對應utf-8格式的Base64編碼是"5LiK572R",對應GB2312格式的Base64編碼是"yc/N+A=="。

文章參考自 "維基百科-Base64"

總結

以上是生活随笔為你收集整理的(转)base64编码(严格说来,base64不算作加解密算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。