什么是Base64 格式字符串?
Base64是一种基于64个可打印字符来表示二进制数据的表示方法。通常是52个大小字母和10个数字,以及+,/两个字符,还有个=用于补缺。
所以一定要注意 字符串是没有空格、用+代替空格。 同url网址传递后,往往+被替换成了空格,如果要解密 url获取到的加密字符串,需要替换空格;/* desc base64 解密算法*/
private function fill8($str){
if(strlen($str) % 8){
$len = strlen($str) + 8 - strlen($str) % 8;
$str = str_pad($str, $len, " ");
}
return $str;
}
public function DesBase64_Decrypt($encrypt_str, $key){
$encrypt_str = substr($encrypt_str, 8);
$encrypt_str = $this->fill8($encrypt_str);
$key = $this->fill8($key);
$cipher = "DES-ECB";
$iv = "";
$original_plaintext = openssl_decrypt(base64_decode($encrypt_str), $cipher, $key ,OPENSSL_NO_PADDING, $iv, $tag);
return base64_decode($original_plaintext);
}
上面代码 功能是解密 一个经过 des-ecb 加密的字符串;
这个加密是增加了一些附加功能的: 加密字符串 = des-ecb 加密后 ,再用 base64 加密。
本算法:des-ecb 加密得到一个 base64字符串,然后再把它 base64 一次。
所以用 openssl_decrypt 解密之前,用 base_decode 字符串。