签名

发送业务请求,必须对业务参数进行签名,签名密钥格式为PKCS8,长度为2048,签名步骤如下:

第 1 步 将所有业务参数按json格式存储并转换成Base64字符串,作为公共参数bizStr的值;

第 2 步 将前一步生成的base64字符串与应用私钥加签,生成Base64签名字符串,作为公共参数sign的值,signType值为固定值RSA2;

第 3 步 按照JSON格式组装公共请求参数,发送业务请求;

php 加签依赖OpenSSL扩展,伪代码:

    // 私钥  
    $privateKey = "-----BEGIN PRIVATE KEY-----  
    ...  
    -----END PRIVATE KEY-----";  

    $params = array(  
        'outOrderId' => 'xxxxxxxxx'
    );  

    // 待签名的数据  
    $data = base64_encode(json_encode($params));  

    // 签名  
    openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);  

    $signatureBase64 = base64_encode($signature);  

    echo $signatureBase64;  

java 加签伪代码:

    PrivateKey priKey = getPrivateKey();
    Signature signature = Signature.getInstance("SHA256WithRSA");
    signature.initSign(priKey);
    signature.update(content.getBytes("utf-8"));
    String sign= Base64.getEncoder().encodeToString(signature.sign());

验签

为了确保业务数据安全,接入方收到业务请求响应数据以及业务通知数据之后,需要对数据进行验签,防止数据被篡改,验签步骤如下:

第 1 步 响应数据/通知数据中字段 bizStr 为待验签数据;

第 2 步 使用平台公钥进行RSA2验签(平台公钥在创建商户应用时获得);

第 3 步 验签通过则为合法数据,否则为非法数据;

php 验签依赖OpenSSL扩展,伪代码:

    // 公钥  
    $publicKey = "-----BEGIN PUBLIC KEY-----  
    ...  
    -----END PUBLIC KEY-----";  

    // 待验证的数据  
    $data = "response bizStr ";  

    $signature = base64_decode(response sign);  

    // 验证签名  
    $is_valid = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);  

    if ($is_valid === 1) {  
        echo "签名验证成功!";  
    } else {  
        echo "签名验证失败!";  
    }  
© All Rights Reserved            updated 2025-01-03 09:24:54

results matching ""

    No results matching ""

    results matching ""

      No results matching ""