php数字证书的签名和验签
来源:互联网 发布:淘宝收藏宝贝没反应 编辑:程序博客网 时间:2024/04/28 15:03
证书的签名和验签经常用在和第三方对接接口的时候用到,用于身份校验和防止数据被篡改。下面整理了一个pfx格式的数字证书的签名和cer格式的公钥进行验签的过程。
tips:需要php开启openssl。
- 签名
/** * 签名 */ public static function sign($params, $keyPath, $pwd) { $params_str = arrToQuery($params, false); $params_sha1x16 = sha1($params_str, false); $private_key = self::getPrivateKey($keyPath, $pwd); $isSignSucceed = openssl_sign($params_sha1x16, $signature, $private_key); if ($isSignSucceed) { $signature_base64 = base64_encode($signature); $params ['signature'] = $signature_base64; laRequest(">>>>>签名成功<<<<<<<"); } else { laRequest(">>>>>签名失败<<<<<<<"); } return $params; } function arrToQuery($arrayQuery, $urlEncode = true) { ksort($arrayQuery); $tmp = array(); foreach ($arrayQuery as $k => $param) { $tmp[] = $k . '=' . ($urlEncode ? urlencode($param) : $param); } $params = implode('&', $tmp); return $params; } public static function getPrivateKey($keyPath, $pwd) { $pkcs12 = file_get_contents($keyPath); openssl_pkcs12_read($pkcs12, $certs, $pwd); return $certs ['pkey']; }
- 验签
public static function verify($params , $pubkeyPath) { $signature_str = $params ['signature']; $signature = base64_decode($signature_str); unset ($params ['signature']); $public_key = file_get_contents($pubkeyPath); $params_str = arrToQuery($params, false); $params_sha1x16 = sha1($params_str, false); $isSuccess = openssl_verify($params_sha1x16, $signature, $public_key); return $isSuccess; }function arrToQuery($arrayQuery, $urlEncode = true){ ksort($arrayQuery); $tmp = array(); foreach ($arrayQuery as $k => $param) { $tmp[] = $k . '=' . ($urlEncode ? urlencode($param) : $param); } $params = implode('&', $tmp); return $params;}
0 0
- php数字证书的签名和验签
- php实现rsa签名和验签
- PHP,C# 和JAVARSA签名及验签
- RSA签名和验签
- PHP与JAVA的签名与验签比较
- 简单的签名 验签
- 签名,验签的理解
- php rsa 加密、解密、签名、验签
- C++利用csp进行签名和验签的例子
- CSP应用开发-签名和验签
- RSA签名和验签过程
- RSA签名和验签过程
- 数字证书应用综合揭秘(包括证书生成、加密、解密、签名、验签)
- SOAP消息的签名验签Handler
- 签名、验签算法
- XML签名验签
- ECDSA签名+验签
- 签名、验签
- Webpack
- 5-8 单词长度 (15分)
- [bzoj4573][UOJ#195][ZJOI2016]大森林
- 由浅入深分布式(5)dubbo提供者用内网地址注册provider以及 spring boot admin client用主机名注册spring boot admin server
- 架构设计:负载均衡层设计方案(3)——Nginx进阶
- php数字证书的签名和验签
- 在socket系统调用中,如何完成三次握手和四次挥手
- JQuery _ $.extend(true,{},object...) 的不完全深复制 与 源代码详解
- 基于HTML5+bootstrap实现类似贪吃蛇游戏
- angularjs中的指令
- 数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器(转)
- Java自动生成Mvp框架目录结构
- Codeforces 768B Code For 1
- Xcode无开发者账号真机测试