> 백엔드 개발 > PHP 튜토리얼 > base64 사용자 정의 인코딩 테이블 PHP 버전

base64 사용자 정의 인코딩 테이블 PHP 버전

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-07-29 09:09:14
원래의
1067명이 탐색했습니다.

인터페이스 도킹에서는 인코딩 및 디코딩에 base64 사용자 정의 인코딩 테이블이 사용됩니다. 인터넷에서 검색해 보니 인코딩 예제가 많이 제공되지만 디코딩은 없습니다. 다음은 제가 직접 구현한 base64 사용자 정의 사전 디코딩의 예입니다. 어셈블리를 테스트한 후 문제가 없을 것입니다. 이 부분이 필요하면 먼저 다른 사람의 블로그에서 원리를 가져오면 됩니다. >

Base64 인코딩, 우리 프로그램 개발에 자주 사용되는 코딩 방식입니다. 이진 데이터를 표현하기 위해 인쇄 가능한 64개의 문자를 사용하는 것을 기반으로 하는 표현 방법입니다. 일반적으로 일부 바이너리 데이터를 저장하고 전송하기 위한 인코딩 방법으로 사용됩니다! MIME(주로 이메일 표준으로 사용되는 다목적 인터넷 메일 확장)에서 인쇄 가능한 문자로 표시되는 이진 데이터에 대한 일반적인 인코딩 방법이기도 합니다! 실제로는 인쇄 가능한 문자를 사용하여 콘텐츠를 전송하는 방법을 정의할 뿐이며 새 문자 집합을 생성하지는 않습니다. 때로는 변환에 대한 아이디어를 배운 후 실제 요구 사항에 따라 자체 인터페이스 정의 코딩 방법을 실제로 구성할 수도 있습니다. 좋아요, 전환 아이디어를 살펴보겠습니다!

Base64 구현 변환 원리

인쇄 가능한 64개의 문자를 사용하여 모든 바이너리 데이터를 표현하는 방식입니다. 2의 6승은 64이므로, 6비트마다 특정 인쇄 가능한 문자에 해당하는 단위로 사용될 수 있습니다. 우리는 3바이트가 24비트를 가지며 이는 4개의 Base64 단위에 해당할 수 있다는 것을 알고 있습니다. 즉, 3바이트는 4개의 Base64 인쇄 가능 문자로 표현되어야 합니다. Base64에서 인쇄 가능한 문자에는 문자 A-Z, a-z 및 숫자 0-9가 포함되므로 총 62개의 문자가 있습니다. 또한 인쇄 가능한 두 기호는 일반적으로 시스템마다 다릅니다. 그러나 우리가 자주 호출하는 Base64의 다른 2개 문자는 "/"입니다. 이 64자에 대한 대응표는 다음과 같다.

변환 중에는 3바이트의 데이터가 24비트 버퍼에 차례대로 들어가고, 먼저 나온 바이트가 상위 비트를 차지합니다. 데이터가 3바이트 미만인 경우 버퍼의 나머지 비트는 0으로 채워집니다. 그런 다음 매번 6비트를 꺼내어 해당 값에 따라 <br>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /의 문자를 선택하여 인코딩된 출력으로 만듭니다. 모든 입력 데이터가 변환될 때까지 계속합니다.

마지막에 입력 데이터가 2개 남으면 인코딩 결과 뒤에 1 "="를 추가하고, 끝에 입력 데이터가 1개 남으면 인코딩 결과 뒤에 2 "="를 추가합니다. 남은 데이터가 없습니다. 데이터 복원의 정확성을 보장하기 위해 아무것도 추가하지 마세요.

인코딩된 데이터가 원본 데이터보다 약간 길어서 원본의 4/3 정도입니다. 어떤 종류의 문자라도 모든 문자가 인코딩되므로 인용 인쇄 가능 인코딩과 달리 일부 인쇄 가능한 문자가 유지됩니다. 따라서 Quoted-printable 인코딩만큼 읽기 어렵습니다!

文本 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

M의 Ascii 코드는 77이고 처음 6자리는 19에 해당하며 해당 base64 문자는 T 등입니다. 다른 문자 인코딩은 자동으로 변환될 수 있습니다! 정확히 3바이트가 아닌 다른 상황을 살펴보겠습니다!

文本(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','_','-'];
공용 함수 getBytes($string) { 
$data = iconv("UTF-8","GBK",$string );
return unpack("C*",$data);

공개 함수 array_index($t){
return array_search($t, $this->base64_config);
}
공용 함수 디코드($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));
}
공용 함수 encode($str){
$byte_arr = $this- >getBytes($str);
$slen=count($byte_arr);
$smod = ($slen%3);
$snum = Floor($slen/3);
$desc = 배열();
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教程有兴趣的朋友有所帮助.

관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿