Base64编码原理分析与PHP实现
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实现:
<?php$input = '赖来基';$obj = new MyBase64();$output = $obj->encode($input);echo "Encode:",$output.PHP_EOL;$output = $obj->decode($output);echo "Decode:",$output.PHP_EOL;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; }}

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Terdapat empat jenis kesilapan utama dalam PHP: 1.Notice: yang paling sedikit, tidak akan mengganggu program, seperti mengakses pembolehubah yang tidak ditentukan; 2. Amaran: Serius daripada notis, tidak akan menamatkan program, seperti tidak mengandungi fail; 3. FatalError: Yang paling serius, akan menamatkan program ini, seperti tidak memanggil fungsi; 4. ParseError: Kesalahan sintaks, akan menghalang program daripada dilaksanakan, seperti lupa untuk menambah tag akhir.

PHP dan Python masing -masing mempunyai kelebihan mereka sendiri, dan memilih mengikut keperluan projek. 1.PHP sesuai untuk pembangunan web, terutamanya untuk pembangunan pesat dan penyelenggaraan laman web. 2. Python sesuai untuk sains data, pembelajaran mesin dan kecerdasan buatan, dengan sintaks ringkas dan sesuai untuk pemula.

Dalam php, kata laluan_hash dan kata laluan 1) password_hash menjana hash yang mengandungi nilai garam untuk meningkatkan keselamatan. 2) Kata Laluan_verify Sahkan kata laluan dan pastikan keselamatan dengan membandingkan nilai hash. 3) MD5 dan SHA1 terdedah dan kekurangan nilai garam, dan tidak sesuai untuk keselamatan kata laluan moden.

PHP digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan pembangunan API. 1) e-dagang: Digunakan untuk fungsi keranjang belanja dan pemprosesan pembayaran. 2) Sistem Pengurusan Kandungan: Digunakan untuk penjanaan kandungan dinamik dan pengurusan pengguna. 3) Pembangunan API: Digunakan untuk Pembangunan API RESTful dan Keselamatan API. Melalui pengoptimuman prestasi dan amalan terbaik, kecekapan dan pemeliharaan aplikasi PHP bertambah baik.

Kaedah permintaan HTTP termasuk GET, POST, PUT dan DELETE, yang digunakan untuk mendapatkan, menghantar, mengemas kini dan memadam sumber masing -masing. 1. Kaedah GET digunakan untuk mendapatkan sumber dan sesuai untuk operasi membaca. 2. Kaedah Pos digunakan untuk menyerahkan data dan sering digunakan untuk membuat sumber baru. 3. Kaedah Put digunakan untuk mengemas kini sumber dan sesuai untuk kemas kini lengkap. 4. Kaedah Padam digunakan untuk memadam sumber dan sesuai untuk operasi penghapusan.

PHP adalah bahasa skrip yang digunakan secara meluas di sisi pelayan, terutamanya sesuai untuk pembangunan web. 1.PHP boleh membenamkan HTML, memproses permintaan dan respons HTTP, dan menyokong pelbagai pangkalan data. 2.PHP digunakan untuk menjana kandungan web dinamik, data borang proses, pangkalan data akses, dan lain -lain, dengan sokongan komuniti yang kuat dan sumber sumber terbuka. 3. PHP adalah bahasa yang ditafsirkan, dan proses pelaksanaan termasuk analisis leksikal, analisis tatabahasa, penyusunan dan pelaksanaan. 4.Php boleh digabungkan dengan MySQL untuk aplikasi lanjutan seperti sistem pendaftaran pengguna. 5. Apabila debugging php, anda boleh menggunakan fungsi seperti error_reporting () dan var_dump (). 6. Mengoptimumkan kod PHP untuk menggunakan mekanisme caching, mengoptimumkan pertanyaan pangkalan data dan menggunakan fungsi terbina dalam. 7

Dalam phpoop, diri :: merujuk kepada kelas semasa, ibu bapa :: merujuk kepada kelas induk, statik :: digunakan untuk mengikat statik lewat. 1.Self :: digunakan untuk kaedah statik dan panggilan berterusan, tetapi tidak menyokong pengikatan statik lewat. 2.Parent :: digunakan untuk subkelas untuk memanggil kaedah kelas induk, dan kaedah peribadi tidak dapat diakses. 3.Static :: Menyokong pengikatan statik lewat, sesuai untuk warisan dan polimorfisme, tetapi boleh menjejaskan kebolehbacaan kod.

PHP mengendalikan fail muat naik melalui pembolehubah fail $ \ _. Kaedah untuk memastikan keselamatan termasuk: 1. Semak kesilapan muat naik, 2. Sahkan jenis dan saiz fail, 3. Mencegah penindasan fail, 4. Pindahkan fail ke lokasi storan tetap.
