//

Information for details

PHP实现MD5WithRSA数字签名算法加密、解密方法

/**
     * 利用约定数据和私钥生成数字签名
     * @param $data 待签数据
     * @return String 返回签名
     */
    function rsaSign($data) {
        $priKey = file_get_contents(API_PATH.'/key/rsa_private_key.pem'); //获取证书信息
        $res = openssl_get_privatekey($priKey);
        openssl_sign($data, $sign,$res,OPENSSL_ALGO_MD5);
        openssl_free_key($res);
        //base64编码
        $sign = base64_encode($sign);
        return $sign;
    }

    //验证数字签名
    public function isValid($data, $signature){
        $public_key = file_get_contents(API_PATH.'/key/rsa_public_key.pem');//获取证书信息

        $pkeyid = openssl_get_publickey($public_key);
        $ret = (bool)openssl_verify($data,base64_decode($signature), $pkeyid, OPENSSL_ALGO_MD5);
        openssl_free_key($pkeyid);
        return $ret;
    }

    //公钥加密
    public function rsaEncrypt($data=''){
        if(empty($data)){
            return false;
        }
        $public_content = file_get_contents(API_PATH.'/key/rsa_public_key.pem');
        if (empty($public_content)){
            return false;
        }
        $public_key = openssl_get_publickey($public_content);
        $original_arr = str_split($data,117);//折分
        foreach($original_arr as $o){
            $sub_enc = null;
            openssl_public_encrypt($o,$sub_enc,$public_key);
            $original_enc_arr[] = $sub_enc;
        }
        openssl_free_key($public_key);
        $original_enc_str = base64_encode(implode('',$original_enc_arr));//最终网络传的密文
        return $original_enc_str;
    }
    
    //私钥解密
    function rsaDecrypt($content) {
        $priKey = file_get_contents(API_PATH.'/key/rsa_private_key.pem');
        $res = openssl_get_privatekey($priKey);
        //用base64将内容还原成二进制
        $content = base64_decode($content);
        //把需要解密的内容,按128位拆开解密
        $result  = '';
        for($i = 0; $i < strlen($content)/128; $i++  ) {
            $data = substr($content, $i * 128, 128);
            openssl_private_decrypt($data, $decrypt, $res);
            $result .= $decrypt;
        }
        openssl_free_key($res);
        return $result;
    }

云南然成科技有限公司是一家专门从事各种软件开发(比如:网站建设开发、微信公众号开发、微信小程序开发、APP开发)的互联网公司,是云南省科技厅、省财政厅、省地税局、省国税局等认定的高新技术企业!

  • 滇公网安备 53010202001388号