php之 进行签名公钥、私钥(SHA1withRSA签名)

参考网址
https://blog.csdn.net/veloi/article/details/112143482

签名算法规则
第一步
设所有发送或者接收到的Json数据的第一级为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA
如果第一级值是对象或者数组,则值是对象/数组的字符串
第二步
在第一步中拼接成字符串stringA进行RSA SHA1withRSA 签名运算,得到sign值signValue

生成签名

public function getSign($data){
    
    ksort($data); 
    
    // 1                                                                                  参数
    $content = urldecode(http_build_query($data));
    
    // 2
    // $content = "";
    // foreach ($data as $key => $val) {
    //     $content = $content .$key .'='. $val.'&';
    // }
    // $content = substr($content, 0, -1);
// var_dump($content);

    //商户私钥
    // 1
    // $str = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCGYjwXlOhNDeN1TIT97LiqRmxY3MNmdG9NjuZwYgBMFB1lFOEHh6hj8ncQcqw+6SFozcXDB3dv8jjtIuESeHndERm1k4n9/5QwO7Pk3PzHFyNaySF9XpRj41B7qlGkQIErmUvp0RjGqtXFG39XM1wLnieUYI/baJRT3Vt1xLXQjAmyJXIlo5Bvv289BvDvt1MlvHOBN6f5s2WQRSMWjpVQt0Vnx5iz+rUqX4mJv8zkioMqShGscXCvA0m99Ir0LlnqpKV5JI1uvHw5TRUiAtsiUHDjG1xW6MPAgMBAAECggEAEbyhhdNHnfP5U6AX5ZP7A65r2oa426r+jdQQokCtHV2CS7cnxGCpXxe/k1IvXdZTbIvMUGOJ5iKoVNRHtLJmE0GQjSC+E9tdRBoyzYhGMKf/1lX9Ydqas5PaErO71j0CVVZRDpaADxTgH35gWq2xoWL1ojwqD6pspNXBalTuIhmIpYS6JUY4XNFQAdwNiXw+j8UpIOhAHdVf/f0BAqZvvuLlVCMkmfzzUoVpCFFROrF9lnJ4NUUIOu63M9RhQLGBHAdWWKbKuFLwCSYl0Q9rfJwK2VE/+vNS/RsJSilJIm4Q4wOYscDCq7gdchNwGfwtd2jp1f6yQghTYiR86a19Id+nh2C+aW4IandmbtdRiOF3ccdFHmcXF7pAXqn/EULM4lFPvD9ZL8qwKBgQDKg71B/w4H4tejPXgXYsx9HCXRpV1ETu3GyMjspeiZIKHr4OwPjIMzpAqVk7JdWEtVMyKInk+4YS9Ypk9eoKLlRZOBLNimybsdTneUGHGRQeljAsJIamk3yKOkurMO/pSn080KL+Lx5hA4pnAgIUv8FHU3OVpmGhYQXuVc+B1EIQKBgBW3Q1c9wReEzXupt5OamlCWKEBRXlA3Gqlils6IGMRXli1z+KPp0Xdp27+++eaTj4Cp5WaX74UgyemZCeKXTfRMTn2QzVU+t5aFN4B4MZ1O2eDp2wYnmZkfApMNFCYZwlAoGANEwIvoG0wVu6uX0MjYwK/ABHNgdVdBF5SP7g7HnrIVxdlX7v3riHh+p0zyZ47cgtMGGdD61J2gmDWTU26LD6GMlva5MHaNysXsy2I2iE6OdJRxGzcZxoMntKvippTzFtou31Zvv3BSvYiKkMjb18eZ4rFmbr9ujs2TObSe9JqPI=";
    
    // $str = chunk_split($str, 64, "\n");
    // $key = "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n";
    
    // 2
    $key = "-----BEGIN RSA PRIVATE KEY-----\n" .
            wordwrap("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCGYjwXlOhNDeN1TIT97LiqRmxY3MNmdG9NjuZwYgBMFB1lFOEHh6hj8ncQcqw+6SFozcXDB3dv8jjtIuESeHndERm1k4n9yx3gI7gEHbSeV0MDi9wB5MnnsGDLE+dvXOMgCptX4pnxWS1Ktqh88/5QwO7Pk3PzHFyNaySF9XpRj41B7qlGkQIErmUvp0RjGqtXFG39XM1wLnieUYI/baJRT3Vt1xLXQjAmyJXIlo5Bvv28Ir0LlnqpKV5JI1uvHw5TRUiAtsiUHDjG1xW6MPAgMBAAECggEAEbyhhdNHnfP5U6AX5ZP7A65r2oa426r+jdQQokCtHV2CS7cnxGCpXxe/k1IvXdZTbIvMUGOJ5iKoVNRHtLJmE0GQjSC+E9tdRBoyzYhGMKf/1lX9Ydqas5PaErO71j0CVVZRDpaADxTgH35gWq2xoWL1ojwqD6pspNXBalTuIhmIpYS6JUY4XNFQAdwNiXw+j8UpIOhAHdVf/f0BAqZvvuLlVCMkmfzzUoVpCFFROrF9lnJ4NUUIOu63M9RhQLGBHAdWWKbKuFLwCSYl0Q9rfJwK2VE/+vNS/RsJSilJIm4Q4wOYscDCq7tdRiOF3ccdFHmcXF7pAXqn/EULM4lFPvD9ZL8qwKBgQDKg71B/w4H4tejPXgXYsx9HCXRpV1ETu3GyMjspeiZIKHr4OwPjIMzpAqVk7JdWEtVMyKInk+4YS9Ypk9eoKLlRZOBLNimybsdTneUGHGRQeljAsJIamk3yKOkurMO/pSn080KL+Lx5hA4pnAgIUv8FHU3OVpmGhYQXuVc+B1EIQKBgBW3Q1c9wReEzXupt5OamlCWKEBRXlA3Gqlils6IGMRXli1z+KPp0Xdp27+++eaTj4Cp5WaX74UgyemZCeKXTfRMTnGBCySc3lQtz2u1j8VkGh9MvptzFJLQU0rdew0Ysnpy2QzVU+t5aFN4B4MZ1O2eDp2wYnmZkfApMNFCYZwlAoGANEwIvoG0wVu6uX0MjYwK/ABHNgdVdBF5SP7g7HnrIVxdlX7v3riHh+p0zyZ47cgtMGGdD61J2gmDWTU26LD6GMlva5MHaNysXsy2I2iE6OdJRxGzcZxoMntKvippTzFtou31Zvv3BSvYiKkMjb18eZ4rFmbr9ujs2TObSe9JqPI=", 64, "\n", true) .
            "\n-----END RSA PRIVATE KEY-----";
    
    
    $private_key = openssl_get_privatekey($key);
    // $private_key = openssl_pkey_get_private($key);//加载密钥
    
    // 使用私钥生成签名
    $signature = '';
    openssl_sign($content,$signature,$private_key,OPENSSL_ALGO_SHA1);//生成签名
    // openssl_sign($content,$signature,$private_key,'SHA1');//生成签名
    $encryptedData = base64_encode($signature);
    openssl_free_key($private_key);

    return $encryptedData;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值