php端實現 DES+BASE64 解密

什麼是Base64 格式字符串?php

Base64是一種基於64個可打印字符來表示二進制數據的表示方法。一般是52個大小字母和10個數字,以及+,/兩個字符,還有個=用於補缺。算法

因此必定要注意 字符串是沒有空格、用+代替空格。 同url網址傳遞後,每每+被替換成了空格,若是要解密 url獲取到的加密字符串,須要替換空格; this

/* 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 加密。url

本算法:des-ecb  加密獲得一個 base64字符串,而後再把它 base64 一次。code

因此用 openssl_decrypt 解密以前,用 base_decode 字符串。ip

相關文章
相關標籤/搜索