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转码和文件日志相关推荐

  1. rsa公钥私钥生成工具

    rsa公钥私钥生成工具-java代码如下: /*** * @Description: RSA工具类,支持长度为2048的秘钥*/ @Slf4j public class RSAUtils {/*** ...

  2. 破解打开证书加密的PDF文档-数字证书(电子书私钥)下载和导入教程

    数字证书(电子书私钥)的导入方法-如何破解打开证书加密的PDF文档 请回复下载本证书,相关教程见压缩包内使用说明:文件解压密码:www.8cmd.com *** Hidden to visitors ...

  3. java生成二维码到文件,java生成二维码转成BASE64

    java生成二维码到文件,java生成二维码转成BASE64 如题,利用java和第三方库,把指定的字符串生成二维码,并且把二维码保存成图片,转换成BASE64格式. 需要的jar文件: packag ...

  4. 利用qrcode生成二维码提取文件信息

    前言: 在一些不通外网的客户机器上,需要通过生成的mi来生成license.所以需要取出mi文件.想到使用qrcode 限制: 文件不能太大,因为一个二维码所能保存的信息很有限. 贴上代码: #!/u ...

  5. java中RSA数字证书生成,jks文件生成以及读取。

    一.Java代码生成cer证书文件: public class GetCertFile { //证书颁发者     static String CertificateIssuer = "C= ...

  6. 【学习笔记】数字证书,私钥——公钥

    1.公钥是公开的,给大家用的,为的是解密私钥加密的内容.(可以用来验证是否是私钥拥有者发布的内容) 2.私钥是个人私有的,作用是解密公钥加密的内容.(可以使别人给私钥拥有者发的消息避免让别人看到) 数 ...

  7. C# RSA 公钥私钥生成方法

    生成C# RSA公钥私钥,上码: public sealed class RSAFromPkcs8{ /// <summary>/// 生成公钥与私钥方法/// </summary& ...

  8. java 证书公钥 私钥_ssl - 在Java Key中导入私钥/公钥证书对

    这个问题在这里已有答案: 如何在Java密钥库中导入现有的x509证书和私钥以在SSL中使用?                                     10个答案 我使用以下步骤创建一 ...

  9. 支付宝支付 开放平台设置以及公钥私钥生成配置

    支付宝支付-开放平台配置: 拿应用公钥去生成支付宝公钥, 注意配置文件要填的公钥是支付宝公钥. AES密钥设置了就不能删除,但是可以不用,也不影响. 下面去配置私钥: 点击打开文件位置, 去掉首尾的红 ...

最新文章

  1. 处理器解决物联网和人工智能的融合
  2. python代码示例500行源代码-500行Python代码打造刷脸考勤系统,其实也就那么简单...
  3. 好好学python · 字符串(find(),index(),split(),join(),strip(),replace())
  4. python k线合成_手把手教你写一个Python版的K线合成函数
  5. boost::json模块实现远程过程调用的测试程序
  6. 专接本汇编开发工具【Masm for Winodws 集成实验环境】安装细则
  7. Struct2_定义拦截器并使用注解方式作用在Action的方法中
  8. message:MCODE参数不存在,mobile类型mcode参数必需
  9. java中对象清空值_对象的引用和清除_Java语言程
  10. 读取pcap获得端口_渗透技巧——获得Exchange GlobalAddressList的方法
  11. js修改mysql数据库数据_Node.js操作mysql数据库增删改查_node.js
  12. 程序员100套简历模板,全网最全
  13. MSR5560 路由器映射
  14. 魔兽延迟最低的服务器,魔兽世界延迟高解决方法
  15. 离散实验一 油管铺设 (求最小生成树的Prim算法的实际应用)
  16. VUE 项目图标全部替换成阿里巴巴矢量图
  17. ad10捕捉pad中点_【中考专题】中点模型(通关篇)—三种方法,助你通关!
  18. Java6面向对象编程创建一个矩形类, 求周长 面积
  19. linux的systemctl命令介绍
  20. 强化学习使用gym时出现错误:ValueError: too many values to unpack (expected 4)

热门文章

  1. 用模板元实现50个台阶问题,一次走一步或者两步或者3步,用模板元实现求裴波那契额数列
  2. 基于注解的SpringMVC整合JPA
  3. 打开高效文本编辑之门_Linux Awk之条件判断与循环
  4. Excel多因素可重复方差分析
  5. java用途与python_python与java用途区别有哪些
  6. [深度学习基础] 4. 卷积神经网络
  7. 错误fatal error: zlib.h: 没有那个文件或目录的解决办法
  8. mybatis关联查询
  9. python重命名文件源码
  10. 理解 React Hooks