Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Version der benutzerdefinierten Base64-Codierungstabelle

PHP-Version der benutzerdefinierten Base64-Codierungstabelle

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-07-29 09:09:14
Original
1066 Leute haben es durchsucht

Beim Schnittstellen-Docking wird eine benutzerdefinierte Base64-Kodierungstabelle zum Kodieren und Dekodieren verwendet. Ich habe im Internet gesucht und festgestellt, dass es viele und ausführliche Erklärungen zu den Kodierungsbeispielen gibt Das Folgende ist ein Beispiel für die von mir implementierte Base64-Dekodierung. Nach dem Testen der Assembly sollte es kein Problem geben. Wenn Sie dieses Stück benötigen, können Sie sich zunächst das Prinzip aus den Blogs anderer Leute ansehen >

Base64-Kodierung. Dies ist eine Kodierungsmethode, die häufig in unserer Programmentwicklung verwendet wird. Es handelt sich um eine Darstellungsmethode, die auf der Verwendung von 64 druckbaren Zeichen zur Darstellung von Binärdaten basiert. Es wird normalerweise als Codierungsmethode zum Speichern und Übertragen einiger Binärdaten verwendet! Es ist auch eine gängige Kodierungsmethode für Binärdaten, die durch druckbare Zeichen in MIME (Multipurpose Internet Mail Extensions, hauptsächlich als E-Mail-Standard verwendet) dargestellt werden! Es definiert eigentlich nur eine Methode zum Übertragen von Inhalten mithilfe druckbarer Zeichen und erstellt keinen neuen Zeichensatz! Manchmal können wir, nachdem wir die Idee der Konvertierung kennengelernt haben, tatsächlich einige unserer eigenen Codierungsmethoden für Schnittstellendefinitionen erstellen, die auf unseren eigenen tatsächlichen Anforderungen basieren. Okay, werfen wir einen Blick auf die Konvertierungsideen!

Base64-Implementierungskonvertierungsprinzip

Es handelt sich um eine Methode zur Verwendung von 64 druckbaren Zeichen zur Darstellung aller Binärdaten. Da 2 hoch 6 gleich 64 ist, können alle 6 Bits als Einheit verwendet werden, entsprechend einem bestimmten druckbaren Zeichen. Wir wissen, dass drei Bytes 24 Bits haben, was 4 Base64-Einheiten entsprechen kann, dh 3 Bytes müssen durch 4 druckbare Base64-Zeichen dargestellt werden. Zu den druckbaren Zeichen in Base64 gehören die Buchstaben A-Z, a-z und die Zahlen 0-9, sodass insgesamt 62 Zeichen vorhanden sind. Darüber hinaus unterscheiden sich die beiden druckbaren Symbole in verschiedenen Systemen im Allgemeinen. Die anderen beiden Zeichen von Base64, die wir oft nennen, sind jedoch: „/“. Die entsprechende Tabelle dieser 64 Zeichen lautet wie folgt.

Bei der Konvertierung werden nacheinander drei Bytes Daten in einen 24-Bit-Puffer gelegt, wobei das zuerst kommende Byte das High-Bit belegt. Wenn die Daten weniger als 3 Bytes umfassen, werden die verbleibenden Bits im Puffer mit Nullen aufgefüllt. Dann werden jedes Mal 6 Bits herausgenommen und die Zeichen in <br>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 / entsprechend ihrem Wert als codierte Ausgabe ausgewählt. Fahren Sie fort, bis alle Eingabedaten konvertiert sind.

Wenn noch zwei Eingabedaten vorhanden sind, fügen Sie nach dem Codierungsergebnis 1 „=“ hinzu. Wenn am Ende noch ein Eingabedatensatz vorhanden ist, fügen Sie nach dem Codierungsergebnis 2 „=“ hinzu links, fügen Sie einfach nichts hinzu, um die Genauigkeit der Datenwiederherstellung sicherzustellen.

Die codierten Daten sind etwas länger als die Originaldaten, 4/3 des Originals. Unabhängig von der Art der Zeichen werden alle Zeichen codiert, sodass im Gegensatz zur Quoted-printable-Codierung einige druckbare Zeichen beibehalten werden. Daher ist es nicht so lesbar wie die Quoted-printable-Kodierung!

文本 M a n
ASCII编码 77 97 110
二进制位 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
索引 19 22 5 46
Base64编码 T W F u

Der ASCII-Code von M ist 77, die ersten sechs Ziffern entsprechen 19, das entsprechende Base64-Zeichen ist T und so weiter. Andere Zeichenkodierungen können automatisch konvertiert werden! Schauen wir uns die andere Situation an, in der es nicht genau 3 Bytes sind!

文本(1 Byte) A    
二进制位 0 1 0 0 0 0 0 1                                
二进制位(补0) 0 1 0 0 0 0 0 1 0 0 0 0                        
Base64编码 Q Q = =
文本(2 Byte) B C  
二进制位 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 1     x x x x x x
二进制位(补0) 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 1 0 0 x x x x x x
Base64编码 Q k M  =

这个讲的很透彻,原文地址:http://www.cnblogs.com/chengmo/archive/2014/05/18/3735917.html

class base64{
public $base64_config = ['A','B','C','D','E','F','G','H','I','J ','K','L','M','N','O','P','Q','R','S','T','U','V', „W“, „X“, „Y“, „Z“, „a“, „b“, „c“, „d“, „e“, „f“, „g“, „h“, „i“. ','j','k','l','m','n','o','p','q','r','s','t','u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7 ','8','9','_','-'];
public function getBytes($string) { 
$data = iconv("UTF-8","GBK",$string );
return unpack("C*",$data);

public function array_index($t){
return array_search($t, $this->base64_config);
}
public function decode($str){
$str = str_replace("!","",$str);
$slen = strlen($str);
$mod = $slen%4;
$num = floor($slen/4);
$desc = [];
for($i=0;$i<$num;$i ){
$arr = array_map("base64::array_index",str_split(substr($str,$i*4,4))));
$desc_0 = ($arr[0]<<2)| (($arr[1]&48)>>4);
$desc_1 = (($arr[1]&15)<<4)|(($arr[2]&60)>> ;2);
$desc_2 = (($arr[2]&3)<<6)|$arr[3];
$desc = array_merge($desc,[$desc_0,$desc_1, $desc_2]);
}
if($mod == 0) return implode('', array_map("chr",$desc));
$arr = array_map("base64::array_index ", str_split(substr($str,$num*4,4)));
if(count($arr) == 1) {
$desc_0 = $arr[0]<<2 ;
if($desc_0 != 0) $desc = array_merge($desc,[$desc_0]);
}else if(count($arr) == 2) {
$desc_0 = ( $arr[0]<<2)|(($arr[1]&48)>>4);
$desc = array_merge($desc,[$desc_0]);
}else if(count($arr) == 3) {
$desc_0 = ($arr[0]<<2)|(($arr[1]&48)>>4);
$desc_1 = ($arr[1]<<4)|(($arr[2]&60)>>2);
$desc = array_merge($desc,[$desc_0,$desc_1] );
}
return implode('', array_map("chr",$desc));
}
public function encode($str){
$byte_arr = $this- >getBytes($str);
$slen=count($byte_arr);
$smod = ($slen%3);
$snum = floor($slen/3);
$desc = array();
for($i=1;$i<=$snum;$i ){
$index_num = ($i-1)*3;
$_dec0= $ byte_arr[$index_num 1]>>2;
$_dec1= (($byte_arr[$index_num 1]&3)<<4)|($byte_arr[$index_num 2]>>4) ;
$_dec2= (($byte_arr[$index_num 2]&0xF)<<2)|($byte_arr[$index_num 3]>>6); 
$_dec3= $byte_arr[$index_num 3]&63;
$desc = array_merge($desc,array($this->base64_config[$_dec0],$this->base64_config[$_dec1], $this->base64_config[$_dec2],$this->base64_config[$_dec3]));
}
if($smod==0) return implode('',$desc);
$n = ($snum*3) 1;
$_dec0= $byte_arr[$n]>>2;
///只有一个字节
if(!isset($ byte_arr[$n 1])){
$_dec1= (($byte_arr[$n]&3)<<4);
$_dec2=$_dec3="!";
}else {
///2个字节
$_dec1= (($byte_arr[$n]&3)<<4)|($byte_arr[$n 1]>>4);
$_dec2= $this->base64_config[($byte_arr[$n 1]&0xF)<<2];
$_dec3="!";
}
$desc = array_merge ($desc,array($this->base64_config[$_dec0],$this->base64_config[$_dec1],$_dec2,$_dec3));
return implode('',$desc);
}
}

$base64 = new base64();
//echo array_search("E",$base64->base64_config);
//exit;
$tt = $base64->encode("中文那在场也不怕asdasdas23232323,。、");
echo $tt."
";
$ttt = $base64-> ;decode($tt);
echo $ttt."
";

以上就介绍了base64自定义编码表 php版本, 包括了方面的内容, 希望对PHP教程有兴趣的朋友有所帮助。

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage