亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

Base64編碼原理分析與PHP實現

2020-03-22 18:49:39
字體:
來源:轉載
供稿:網友
Base64是一種基于64個可打印字符來表示二進制數據的表示方法。由于2的6次方等于64,所以每6個為一個單元,對應某個可打印字符。

三個bites有24個比特,對應于4個Base64單元,即3個字節需要用4個可打印字符來表示。它可用來作為電子郵件的傳輸編碼。

在Base64中的可打印字符包括字母A-Z、a-z、數字0-9,這樣共有62個字符,此外兩個可打印符號在不同的系統中而不同。

如在mime(多用途郵件擴展)中,Base64的使用的64個可打印字符

A-Za-z:大小寫字母各26個

0-9:加上10個數字

+:加號

/:斜杠

一共64個字符,等號“=”用來作為后綴用途

對應的轉換關系為

0-63:A-Za-z0-9+/


轉換的時候,將三個byte的數據,先后放入一個24bit的緩沖區中,先來的byte占高位。數據不足3byte的話,于緩沖器中剩下的bit用0補足。然后,每次取出6(因為26=64)個bit,按照其值選擇ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作為編碼后的輸出。不斷進行,直到全部輸入數據轉換完成。

當原數據長度不是3的整數倍時, 如果最后剩下一個輸入數據,在編碼結果后加2個“=”;如果最后剩下兩個輸入數據,編碼結果后加1個“=”;如果沒有剩下任何數據,就什么都不要加,這樣才可以保證數據還原的正確性。

實例分析:

編碼:"Lailaiji"

通過查ASCII表找到對應關系

L:0x4c | a:0x61 | i:0x69 | l:0x6C | j:0x6A

因此轉換成二進制為:0100 1100 , 0110 0001 , 0110 1001 , 0110 1100 , 0110 0001 , 0110 1001 , 0110 1010 , 0110 1001

第一步:先取三個字節的數據即:0100 1100 , 0110 0001 , 0110 1001,然后從這個三字節中取出6位即010011,在最高位補充兩個位00使其成為1個byte,即0001 0011,剩余的18位也如此循環,最終這三個字節將擴展成為4個字節即:0001 0011, 0000 0110, 0000 0101, 0010 1001

第二步,從剩余的字節序列中再重復第一步,走到小于3個字節

第三步,這時剩余字節為:0110 1010,0110 1001不足3個字節,需要在從低位以0進行補充,即成0110 1010,0110 1001,0000 0000重復第一步,得到:0001 1010,0010 0110, 0010 0100, 0000 0000,

經過以后的運算后,我們將得到一組位序列:

0001 0011, 0000 0110, 0000 0101, 0010 1001

0001 1011,0000 0110, 0000 0101, 0010 1001

0001 1010,0010 0110, 0010 0100, 0000 0000

轉換成十進制為:19,6,5,41,27,6,5,41,26,38,36,0

對應的字符為:T,G,F,p,b,G,F,p,a,m,k,A

特別注重的是,最后一個字節0000 0000即0x00,通過查表為A,由于最后這8位是補充的,所以它應當被轉換成=號,而不是A

因此:最終結果為:TGFpbGFpamk=

PHP實現:

encode($input);echo "Encode:",$output.PHP_EOL;$output = $obj->decode($output);echo "Decode:",$output.PHP_EOL;html' target='_blank'>class MyBase64{private $_table = array();private $_revtable = array();public function __construct(){$this->_initTable();}public function decode($string){$orign_len = strlen($string);$j = 0;$ret = null;for($i=0; $i<$orign_len; $i+=4){$chr1 = $this->getRevChr($string[$i]);$chr2 = $this->getRevChr($string[$i+1]);$chr3 = $this->getRevChr($string[$i+2]);$chr4 = $this->getRevChr($string[$i+3]);$_chr1 = $chr1<<2 | ($chr2&0x3F) >>4;$_chr2 = ($chr2&0x0F)<<4 | ($chr3&0xFC) >>2;$_chr3 = ($chr3&0x03)<<6 | $chr4;$ret .= chr($_chr1);$ret .= chr($_chr2);$ret .= chr($_chr3);}$ret = rtrim($ret);return $ret;}private function getRevChr($chr){if(isset($this->_revtable[$chr])){return $this->_revtable[$chr];}else{return 0;}}public function _decode($string){$orign_len = strlen($string);$de = null;$kv = array_flip($this->_table);$b  = null;for($i = 0 ;$i < $orign_len;$i++){$chr = $string[$i];if($chr != '='){$c = $kv[$chr];}else{$c = chr(0);}printf("%x",$c);$b[] = pack('C',$c);echo PHP_EOL;}for($i = 0 ;$i < count($b);$i+=3){$ch1 = ($b[$i]<<2) | ($b[$i+1]>>4);$ch2 = ($b[$i+1]<<4) | ($b[$i+2]>>2);$ch3 = ($b[$i+2]<<6) | ($b[$i+3]);printf('%08b,%08b,%08b',$ch1,$ch2,$ch3);echo PHP_EOL;printf('%08b,%08b',($b[$i]<<2) , ($b[$i+1]>>4));echo PHP_EOL;}}public function encode($string){$orign_len = strlen($string);$len       = intval(ceil($orign_len/3)*3);$bin       = pack('a'.$len,$string);$gen       = null;for($i=0; $i<$len; $i+=3){$ch1 = ord($bin[$i]) >> 2;$ch2 = ((ord($bin[$i]) & 0x03) << 4) | (ord($bin[$i+1]) >> 4);$ch3 = ((ord($bin[$i+1]) & 0x0F) << 2) | ((ord($bin[$i+2]) & 0xC0) >> 6);$ch4 = ord($bin[$i+2]) & 0x3F;$gen.= $this->_table[$ch1];$gen.= $this->_table[$ch2];$gen.= $this->_table[$ch3];$gen.= $this->_table[$ch4];}if($orign_len-$len){$gen = substr($gen,0, -abs($orign_len-$len));for($i=0;$i<$len-$orign_len;$i++){$gen .= '=';}}return $gen;}private function  _initTable(){$tbl = array();for($i=ord('A');$i<=ord('Z');$i++){$tbl[] = chr($i);}for($i=ord('a');$i<=ord('z');$i++){$tbl[] = chr($i);}for($i=ord('0');$i<=ord('9');$i++){$tbl[] = chr($i);}$tbl[]           = '+';$tbl[]           = '/';$reverse         = array_flip($tbl);$this->_table    = $tbl;$this->_revtable = $reverse;}}

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产乱码久久久久久天美| 亚洲欧美日韩国产成人| 一个人看的www久久| 久久精视频免费在线久久完整在线看| 播播国产欧美激情| 亚洲精品国产综合区久久久久久久| 98视频在线噜噜噜国产| 69精品小视频| 亚洲一区二区三区在线免费观看| 欧美亚洲另类激情另类| 日韩在线观看高清| 一区二区三区亚洲| 亚洲午夜精品久久久久久久久久久久| 操日韩av在线电影| 国产精品高潮呻吟久久av黑人| 亚洲精品午夜精品| 日韩国产高清污视频在线观看| 亚洲最大福利网| 欧美性猛交xxxx乱大交极品| 久久久久日韩精品久久久男男| 中文字幕精品在线视频| 亚洲欧洲日产国码av系列天堂| 国产一区二区黑人欧美xxxx| 日韩精品在线免费观看| 77777亚洲午夜久久多人| 欧美日韩国产一中文字不卡| 日本亚洲欧美三级| 97视频人免费观看| 日韩免费在线观看视频| 亚洲一区二区三区xxx视频| 91sa在线看| 欧美插天视频在线播放| 国产精品视频一区二区三区四| 亚洲色图av在线| 欧美专区第一页| 欧美亚洲国产日本| 欧美性生交xxxxx久久久| 精品美女永久免费视频| 亚洲欧美变态国产另类| 国产精品久久97| 国产精品爽爽爽爽爽爽在线观看| 久久视频免费在线播放| 日本sm极度另类视频| 久久亚洲精品中文字幕冲田杏梨| 亚洲高清av在线| 久久亚洲精品一区| 国产91色在线播放| 国产日韩中文字幕在线| 日本不卡视频在线播放| 日韩高清免费在线| 永久免费看mv网站入口亚洲| 精品久久久免费| 亚洲国产中文字幕在线观看| 色婷婷av一区二区三区久久| 亚洲丁香久久久| 欧美最顶级的aⅴ艳星| 亚洲欧洲一区二区三区在线观看| 欧美性xxxxx极品| 欧美超级乱淫片喷水| 国产精品jizz在线观看麻豆| 91精品国产综合久久香蕉922| 91av国产在线| 亚洲精品综合精品自拍| 亚洲bt欧美bt日本bt| 国产精品自产拍在线观看中文| 日韩av在线天堂网| 懂色aⅴ精品一区二区三区蜜月| 欧美精品做受xxx性少妇| 日韩精品中文字幕在线播放| 亚洲成人网在线观看| 久久精品国产久精国产一老狼| 国产ts人妖一区二区三区| 45www国产精品网站| 97久久国产精品| 日韩精品在线第一页| 北条麻妃一区二区三区中文字幕| 亚洲国产日韩一区| 欧美精品一区在线播放| 久久久欧美一区二区| 亚洲www永久成人夜色| 日韩美女免费观看| 欧美激情一区二区三区在线视频观看| 色偷偷av一区二区三区乱| 日韩有码在线视频| 精品国产乱码久久久久久天美| 菠萝蜜影院一区二区免费| 欧美激情在线观看视频| 美女精品久久久| 最好看的2019年中文视频| 92看片淫黄大片欧美看国产片| 欧美精品在线观看91| 成人精品视频99在线观看免费| 红桃视频成人在线观看| 国产婷婷97碰碰久久人人蜜臀| 久久福利视频导航| 亚洲欧美日韩在线高清直播| 最近2019中文字幕一页二页| 日韩精品在线看| 大荫蒂欧美视频另类xxxx| 日韩免费在线播放| 国产97在线视频| 最近中文字幕mv在线一区二区三区四区| 久久在线免费视频| 欧美激情视频三区| 欧美插天视频在线播放| 亚洲男人天堂手机在线| 清纯唯美亚洲综合| 精品一区二区三区四区| 午夜精品久久久久久久99热| 国产91色在线|| 午夜精品福利视频| 亚洲美女免费精品视频在线观看| 亚洲欧美日韩精品| 国产精品白嫩美女在线观看| 色婷婷综合久久久久| 欧美国产日韩免费| 欧美影院成年免费版| 91视频九色网站| 日韩免费精品视频| 亚洲欧美国产精品| 成人精品久久av网站| 国产在线视频2019最新视频| 成人高清视频观看www| 欧美成人免费全部观看天天性色| 欧美性生交大片免费| 国产不卡av在线免费观看| 亚洲精品美女在线观看| 91美女福利视频高清| 久久久精品中文字幕| 黑丝美女久久久| 亚洲精品久久久久久久久久久久久| 日韩av不卡电影| 88国产精品欧美一区二区三区| 精品久久中文字幕久久av| 国产亚洲一区二区精品| 欧美裸体xxxx极品少妇| 亚洲性无码av在线| 日韩国产欧美区| 国产亚洲欧美日韩精品| 日本国产高清不卡| 91青草视频久久| 欧美日韩高清在线观看| 亚洲国产成人精品久久久国产成人一区| 亚洲视频在线观看视频| 亚洲国产女人aaa毛片在线| 91精品一区二区| 国产一区二区三区在线| 久久久91精品国产| 91精品中文在线| 一区二区三欧美| 欧洲s码亚洲m码精品一区| 国产精品91在线| 亚洲欧美精品中文字幕在线| 亚洲自拍偷拍色图| 久久精品视频在线播放| 日韩高清人体午夜| 欧美精品xxx| 欧洲精品毛片网站| 成人av色在线观看| 日韩欧美亚洲范冰冰与中字| 日本欧美在线视频| 2019中文字幕在线免费观看| 欧洲美女免费图片一区| 日韩亚洲一区二区|