php端实现 DES+BASE64 解密

摘要:什么是Base64 格式字符串?Base64是一种基于64个可打印字符来表示二进制数据的表示方法。通常是52个大小字母和10个数字,以及+,/两个字符,还有个=用于补缺。

什么是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 字符串。

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_6152