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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

base64编码以及url safe base64是怎么工作的?

發布時間:2023/12/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 base64编码以及url safe base64是怎么工作的? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文轉自?http://www.yanshiba.com/archives/638

?

1: 為什么需要base64?

ASCII碼一共規定了128個字符的編碼,這128個符號,范圍在[0,127]之間.
其中,[0,31],及127, 33個屬于不可打印的控制字符.

在電子郵件傳輸信息時,有些郵件網關會把[0,31]這些控制字符給悄悄清除.
還有的早期程序,收到[128,255]之間的國際字符時,甚至會發生錯誤.

如何在不同郵件網關之間安全的傳輸控制字符,國際字符,甚至二進制文件?
于是作為MIME多媒體電子郵件標準的一部分—base64被開發出來.

1.a 什么是url_safe base64編碼?

在上面的base64傳統編碼中會出現+, /兩個會被url直接轉義的符號,因此如果希望通過url傳輸這些編碼字符串,我們

需要先做傳統base64編碼,隨后將+和/分別替換為- _兩個字符,在接收端則做相反的動作解碼

http://www.ietf.org/rfc/rfc4648.txt

/*** URL base64解碼* '-' -> '+'* '_' -> '/'* 字符串長度%4的余數,補'='* @param unknown $string*/function urlsafe_b64decode($string) {$data = str_replace(array('-','_'),array('+','/'),$string);$mod4 = strlen($data) % 4;if ($mod4) {$data .= substr('====', $mod4);}return base64_decode($data);}/*** URL base64編碼* '+' -> '-'* '/' -> '_'* '=' -> ''* @param unknown $string*/function urlsafe_b64encode($string) {$data = base64_encode($string);$data = str_replace(array('+','/','='),array('-','_',''),$data);return $data;}

?

2: 一句話說完base64怎么工作的?

把N字節的內容對應的8*N位, 每6位砍成1段,得到 (8*N)/6 個單元,
每個單元的值,都在[0,63]之間,再把其值對應1個ascii字符,拼接起來,OK!

base64_encode(’PHP’) ==> ‘UEhQ’, 編碼過程如下:

3: 如果每6位砍成1段,但不能整除,余下2個位或4位怎么辦?

用”0″來補至6位, 并再次轉化為”base64字符表”中的某個字符.

然后,再用”=”字符當做6個位,繼續填充,直至總位數能被8帶整除.

字符串二進制序列(紅字為填充位)編碼結果
PHP010100 000100 100001 010000UEhQ
it011010 010111 0100

?

00 xxxxxx

aXQ=
bool011000 100110 111101 101111 011011 00

?

0000 xxxxxx xxxxxx

Ym9vbA==

4:base64表示圖片

通過上面的演示,可以看出,base64也可以編碼二進制文件,如郵件中的圖片和附件.
編碼后,我們可以在網頁或郵件的源碼里,直接體現此圖片,
而不必把圖片放在服務器上,引用其鏈接.

用例:base64(’abc.png’) ==> ‘encoded-result’;
則在網頁中, <img src=”data:image/png;base64,encoded-result” />

看到下面這個5角星了嗎? 右鍵看源碼,就會發現圖片是一串字符串?

5: base64編碼后字節的變化

很容易推算出, 編碼后,每6個位變成8個位.
因此,編碼后字節約比編碼前多33%.

6: base64串結尾的”=”可以去掉嗎?

從上面的編碼規則可以反推出, 在base64解碼的過程中, 要清除掉結尾處的等號,
然后再反查”base64索引與字母對照表”,轉換成原始的字節序列.

那么,去掉尾部的等號,并沒有丟失原始信息,但結構變得不規范.
解碼前是否判斷完整性,這取決于你的應用程序.

實測PHP中的base64_decode函數,并不檢測尾部的等號是否完整.

轉載于:https://www.cnblogs.com/kidsitcn/p/6901431.html

總結

以上是生活随笔為你收集整理的base64编码以及url safe base64是怎么工作的?的全部內容,希望文章能夠幫你解決所遇到的問題。

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