签名算法sha256withrsa,RSA数字证书公钥私钥生成,base64转码和文件日志
RSA数字证书公钥密钥生成:
在Linux系统下运行以下命令生成:
如果提示输出密码,可以为空,直接回车
生成的公钥rsa_public_key.pem和密钥rsa_private_key.pem文件在当前目录下
# openssl# genrsa -out rsa_private_key.pem 2048 Generating RSA private key, 2048 bit long modulus# pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt# rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
签名算法sha256withrsa:
$string:需要加密的字符串
$binary_signature:加密后保存到该变量中
$this->privateKey:RSA的私钥。(使用file_get_contents()读取私钥文件获取);openssl_sign($string, $binary_signature, $this->privateKey, OPENSSL_ALGO_SHA256);
实例:
签名算法使用sha256withrsa算法,我方和渠道伙伴需交换RSA数字证书公钥用于验证签名,签名时,使用RSA数字证书私钥对签名参数串进行签名,RSA密用2048位及以上的,将签名值使用BASE64转码后填充到报文的数字签名域(Signature)。验证签名时,使用对方颁发的RSA数字证书公钥进行验签
/*** 签名 + post请求* @param array $param 请求参数* @param string $method 第三方方法名* @param string $api_method 接口名* @param string $is_big 通道别名* @param int $phone 手机号码* @return mixed*/public function sign_post($param, $method, $api_method, $is_big, $phone){$param['reqTime'] = date('YmdHis');$param['partnerId'] = $this->partnerId;$this->log($param, $api_method, $is_big, '签名前数据:', $phone);$signature = $this->makeSign($param);$this->log($signature, $api_method, $is_big, '签名值:');$param['signature'] = $signature;$types = explode('_',$api_method);if($types[0] == 'sk'){$requestUrl = $this->edUrl . $method;}else{$requestUrl = $this->zdUrl . $method;}$this->log($requestUrl, $api_method, $is_big, '请求url:');$this->log($param, $api_method, $is_big, '请求报文:');$res = $this->curl($requestUrl, $param);$this->log($res, $api_method, $is_big, '响应报文:');return $res;}/*** 生成签名* @param $params array 请求参数* @param $privateKey string 秘钥* @return $sign string 签名内容*/public function makeSign($params){//签名步骤一:按字典序排序参数,再把所有数组值以“&”字符连接起来ksort($params);$string = $this->toUrlParams($params);openssl_sign($string, $binary_signature, $this->privateKey, OPENSSL_ALGO_SHA256);$sign = base64_encode($binary_signature);return $sign;}/*** 格式化参数格式化成url参数* @param $params array*/public function toUrlParams($params){$buff = "";foreach ($params as $k => $v) {if ($v != "" && !is_array($v)) {$buff .= $k . "=" . $v . "&";}}$buff = trim($buff, "&");return $buff;}//接口post请求public function curl($url = '', $data = ''){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);if (!empty($data)) {curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);}curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_TIMEOUT, 30); //超时时间30秒curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch);curl_close($ch);return $output;}/*** 验签* @param $data array 需要验签的数据*/public function verifySign($data, $publicKey){if (empty($data) || empty($data['signature'])) {return false;}$sign = $data['signature'];unset($data['signature']);ksort($data);$string = $this->ToUrlParams($data);$pubKey = "-----BEGIN PUBLIC KEY-----\n" .wordwrap($publicKey, 64, "\n", true) ."\n-----END PUBLIC KEY-----";$result = (bool)openssl_verify($string, base64_decode($sign), $pubKey, OPENSSL_ALGO_SHA256);return $result;}/*** 日志记录* @param $data /内容* @param $method /方法名* @param $phone /手机号* @param string $is_big /通道别名* @param string $title /标题*/public function Log($data, $method, $is_big, $title, $phone = ''){$str = is_array($data) ? json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) : $data;if (empty($phone)) {$content = '【' . date('Y-m-d H:i:s') . '】' . $title . $str . PHP_EOL;} else {$content = ' phone:' . $phone . '【' . date('Y-m-d H:i:s') . '】' . $title . $str . PHP_EOL;}$path = APPPATH . "../PAYLOG/$is_big/$method/";if (!is_dir($path)) { //判断目录是否存在 不存在就创建mkdir($path, 0777, true);}file_put_contents($path . date("Y-m-d") . '.txt', $content, FILE_APPEND);//换行分割file_put_contents($path . date("Y-m-d") . '.txt', '------------------------' . PHP_EOL, FILE_APPEND);}
签名算法sha256withrsa,RSA数字证书公钥私钥生成,base64转码和文件日志相关推荐
- rsa公钥私钥生成工具
rsa公钥私钥生成工具-java代码如下: /*** * @Description: RSA工具类,支持长度为2048的秘钥*/ @Slf4j public class RSAUtils {/*** ...
- 破解打开证书加密的PDF文档-数字证书(电子书私钥)下载和导入教程
数字证书(电子书私钥)的导入方法-如何破解打开证书加密的PDF文档 请回复下载本证书,相关教程见压缩包内使用说明:文件解压密码:www.8cmd.com *** Hidden to visitors ...
- java生成二维码到文件,java生成二维码转成BASE64
java生成二维码到文件,java生成二维码转成BASE64 如题,利用java和第三方库,把指定的字符串生成二维码,并且把二维码保存成图片,转换成BASE64格式. 需要的jar文件: packag ...
- 利用qrcode生成二维码提取文件信息
前言: 在一些不通外网的客户机器上,需要通过生成的mi来生成license.所以需要取出mi文件.想到使用qrcode 限制: 文件不能太大,因为一个二维码所能保存的信息很有限. 贴上代码: #!/u ...
- java中RSA数字证书生成,jks文件生成以及读取。
一.Java代码生成cer证书文件: public class GetCertFile { //证书颁发者 static String CertificateIssuer = "C= ...
- 【学习笔记】数字证书,私钥——公钥
1.公钥是公开的,给大家用的,为的是解密私钥加密的内容.(可以用来验证是否是私钥拥有者发布的内容) 2.私钥是个人私有的,作用是解密公钥加密的内容.(可以使别人给私钥拥有者发的消息避免让别人看到) 数 ...
- C# RSA 公钥私钥生成方法
生成C# RSA公钥私钥,上码: public sealed class RSAFromPkcs8{ /// <summary>/// 生成公钥与私钥方法/// </summary& ...
- java 证书公钥 私钥_ssl - 在Java Key中导入私钥/公钥证书对
这个问题在这里已有答案: 如何在Java密钥库中导入现有的x509证书和私钥以在SSL中使用? 10个答案 我使用以下步骤创建一 ...
- 支付宝支付 开放平台设置以及公钥私钥生成配置
支付宝支付-开放平台配置: 拿应用公钥去生成支付宝公钥, 注意配置文件要填的公钥是支付宝公钥. AES密钥设置了就不能删除,但是可以不用,也不影响. 下面去配置私钥: 点击打开文件位置, 去掉首尾的红 ...
最新文章
- 处理器解决物联网和人工智能的融合
- python代码示例500行源代码-500行Python代码打造刷脸考勤系统,其实也就那么简单...
- 好好学python · 字符串(find(),index(),split(),join(),strip(),replace())
- python k线合成_手把手教你写一个Python版的K线合成函数
- boost::json模块实现远程过程调用的测试程序
- 专接本汇编开发工具【Masm for Winodws 集成实验环境】安装细则
- Struct2_定义拦截器并使用注解方式作用在Action的方法中
- message:MCODE参数不存在,mobile类型mcode参数必需
- java中对象清空值_对象的引用和清除_Java语言程
- 读取pcap获得端口_渗透技巧——获得Exchange GlobalAddressList的方法
- js修改mysql数据库数据_Node.js操作mysql数据库增删改查_node.js
- 程序员100套简历模板,全网最全
- MSR5560 路由器映射
- 魔兽延迟最低的服务器,魔兽世界延迟高解决方法
- 离散实验一 油管铺设 (求最小生成树的Prim算法的实际应用)
- VUE 项目图标全部替换成阿里巴巴矢量图
- ad10捕捉pad中点_【中考专题】中点模型(通关篇)—三种方法,助你通关!
- Java6面向对象编程创建一个矩形类, 求周长 面积
- linux的systemctl命令介绍
- 强化学习使用gym时出现错误:ValueError: too many values to unpack (expected 4)