genRsakey (1).rar function signByMap($data)

    {
        $sign = '';
        if ($data) {
            ksort($data);
            foreach ($data as $key => $value) {
                if (isset($value)) {
                    if ($key == 'service') {
                        $sign .= $key . '=' . $value;
                    } else {
                        $sign .= $key . '=' . $value . '&';
                    }
                }
            }
        }


        return $sign;
    }
    //加密
    public function rsa_jm($result)
    {

        $data = json_encode($result, true);
        if (empty($data)) {
            return 'data参数不能为空';
        }
        if (is_array($data)) {
            return 'data参数不能是数组形式';
        }

        $rsa_public = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCfZWlnB4jImu0usg6ElOW6qAl/
wIFUhM2e8GXErDpcwHqxNzI6qiC/98Zp/Qiardx+DK+Xr88Uaht62RSpRzmQjzDf
3yb2UHRYVnFPxS/i4rNfpuu6RgIaFhUpQC+h8avbJrXppSuzS6D+GVHT8BWAjlGj
x5L21yzRfa00rkFviQIDAQAB
-----END PUBLIC KEY-----';

        //公钥加密
//        $key = openssl_get_privatekey($rsa_public);
        $key = openssl_pkey_get_public($rsa_public);
        if (!$key) {
            return ('公钥不可用');
        }
        $crypted = array();
        $data = $data;
        $dataArray = str_split($data, 117);
        foreach ($dataArray as $subData) {
            $subCrypted = null;
            openssl_public_encrypt($subData, $subCrypted, $key);
            $crypted[] = $subCrypted;
        }
        $crypted = implode('', $crypted);
        return base64_encode($crypted);
    }

    //验证 sha256WithRSA 签名
    function verify($content, $sign, $publicKey)
    {
        $publicKey = "-----BEGIN PUBLIC KEY-----\n" .
            wordwrap($publicKey, 64, "\n", true) .
            "\n-----END PUBLIC KEY-----";

        $publicKey = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCc52uQwT8+PnYd7swU9VaGrmc6
oEfLd8alfqR8tL8f9eRTwmJnR2vsybUi2MZXeKpFHWg5psq1QkFO+xyrIdQM6ZSM
Q7EwBKUUGMEYhrHZ+4lXq+sOXC5fGZuBoTs8DmCtYQLonGQI4LDHEQzq/RWXPg1g
1x9Ww4hBRwb5Hw7OpwIDAQAB
-----END PUBLIC KEY-----';

        $key = openssl_get_publickey($publicKey);
        $ok = openssl_verify($content, base64_decode($sign), $key, 'SHA256');
        openssl_free_key($key);
        return $ok;
    }

    //生成 sha256WithRSA 签名
    function getSign($content, $privateKey)
    {
        $key = openssl_get_privatekey($privateKey);
        openssl_sign($content, $signature, $key, "SHA256");
        openssl_free_key($key);
        $sign = base64_encode($signature);
        return $sign;
    }


    /**
     *  私钥解密(分段解密)
     *  @encrypstr  加密字符串
     */
    public function decrypt($encryptstr) {
        $encryptstr = base64_decode($encryptstr);
        $decrypted = array();
        $dataArray = str_split($encryptstr, 128);

        foreach($dataArray as $subData){
            $subDecrypted = null;
            openssl_private_decrypt($subData, $subDecrypted, $this->privateKey);
            $decrypted[] = $subDecrypted;
        }
        $decrypted = implode('',$decrypted);
        $decrypted=json_decode($decrypted,true);
        return $decrypted;
    }

标签: none

添加新评论