php对接java现实加签验签的实例

我实现的方法,主要是把java生成的密钥转为php能识别的pem格式的密钥,其它的加签、验签采用调用openssl内置签名方法。

java生成的密钥主要是字符串;而pem格式密钥是以64位为一行,并且带有如下头和尾的文件格式,然后php再去取得相对应pem格式字符串。

pem格式密钥

-----BEGIN PUBLIC KEY----- //64chars一行(多行) -----END PUBLIC KEY----- -----BEGIN RSA PRIVATE KEY----- //64chars一行(多行) -----END RSA PRIVATE KEY-----

1.java密钥转为pem格式的php代码

/** * 将字符串格式公私钥格式化为pem格式公私钥 * @param $secret_key * @param $type * @return string */ public static function format_secret_key($secret_key, $type){ //64个英文字符后接换行符"\n",最后再接换行符"\n" $key = (wordwrap($secret_key, 64, "\n", true))."\n"; //添加pem格式头和尾 if ($type == 'pub') { $pem_key = "-----BEGIN PUBLIC KEY-----\n" . $key . "-----END PUBLIC KEY-----\n"; }else if ($type == 'pri') { $pem_key = "-----BEGIN RSA PRIVATE KEY-----\n" . $key . "-----END RSA PRIVATE KEY-----\n"; }else{ echo('公私钥类型非法'); exit(); } return $pem_key; }

2.加签

/** * RSA加签 * @param $paramStr * @param $priKey * @return string */ public static function sign($paramStr, $priKey){ $sign = ''; //将字符串格式公私钥转为pem格式公私钥 $priKeyPem = SignUtil::format_secret_key($priKey, 'pri'); //转换为openssl密钥,必须是没有经过pkcs8转换的私钥 $res = openssl_get_privatekey($priKeyPem); //调用openssl内置签名方法,生成签名$sign openssl_sign($paramStr, $sign, $res); //释放资源 openssl_free_key($res); //base64编码签名 $signBase64 = base64_encode($sign); //url编码签名 $sign = urlencode($signBase64); return $sign; }

3.验签

/** * RSA验签 * @param $paramStr * @param $sign * @param $pubKey * @return bool */ public static function verify($paramStr, $sign, $pubKey) { //将字符串格式公私钥转为pem格式公私钥 $pubKeyPem = SignUtil::format_secret_key($pubKey, 'pub'); //转换为openssl密钥,必须是没有经过pkcs8转换的公钥 $res = openssl_get_publickey($pubKeyPem); //url解码签名 $signUrl = urldecode($sign); //base64解码签名 $signBase64 = base64_decode($signUrl); //调用openssl内置方法验签,返回bool值 $result = (bool)openssl_verify($paramStr, $signBase64, $res); //释放资源 openssl_free_key($res); //返回资源是否成功 return $result; }

以上这篇php对接java现实加签验签的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

时间: 2025-01-27 09:18:41

php对接java现实加签验签的实例的相关文章

php对接java现实加签验签的实例_php实例

我实现的方法,主要是把java生成的密钥转为php能识别的pem格式的密钥,其它的加签.验签采用调用openssl内置签名方法. java生成的密钥主要是字符串:而pem格式密钥是以64位为一行,并且带有如下头和尾的文件格式,然后php再去取得相对应pem格式字符串. pem格式密钥 -----BEGIN PUBLIC KEY----- //64chars一行(多行) -----END PUBLIC KEY----- -----BEGIN RSA PRIVATE KEY----- //64cha

php rsa 加密,解密,签名,验签详解_php技巧

php rsa 加密,解密,签名,验签 由于对接第三方机构使用的是Java版本的rsa加解密方法,所有刚开始在网上搜到很多PHP版本的rsa加解密,但是对接java大多都不适用. 以下php版本是适用于对接java接口,java适用密钥再php语言使用是需要添加 -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- 使用密钥:加密公钥  public_key.cer 解密私钥  private_key.key 签名私钥 sign_key.ke

PHP与Java进行通信的实现方法_php实例

缘起: 最近做了一个电商平台与网银整合的小东西,程序是开源的 Ecmall的,网银的接口也很规范,给出的文档很全,唯一的小问题是,网银使用的签名和验签的lib是只有java和c的,对java还熟悉一些,所以选择了使用java作为签名和验签的接口. 方法: 网上关于php与java交互的资料其实挺多的.总体来说其实也是这么几种方法: •PHP直接通过exec或者system之类的命令调用命令行,然后以java Hello 这种类型得方式来运行java程序,但是缺点是很明显的,不能很好地与java类

Java Http接口加签、验签操作方法_java

1.业务背景 最近接触了一些电商业务,发现在处理电商业务接口时,比如淘宝.支付类接口,接口双方为了确保数据参数在传输过程中未经过篡改,都需要对接口数据进行加签,然后在接口服务器端对接口参数进行验签,确保两个签名是一样的,验签通过之后再进行业务逻辑处理.我们这里主要介绍一下处理思路,至于签名算法我不做过多介绍,网上一大堆. 2.处理思路 双方约定好,参数按特定顺序排列,比如按首字母的顺序排列,如url:http://xxx/xxx.do?a=wersd&b=sd2354&c=4&si

实例-ping++ java验签(签名,公钥,charge)怎么获取

问题描述 ping++ java验签(签名,公钥,charge)怎么获取 这是官网demo package example;import java.io.FileInputStream;import java.security.InvalidKeyException;import java.security.KeyFactory;import java.security.NoSuchAlgorithmException;import java.security.PublicKey;import

农行支付成功,回调验签失败

问题描述 农行支付成功,回调验签失败 农行支付成功,回调时 String msg = request.getParameter("MSG"); try { PaymentResult pr = new PaymentResult(msg); if(pr.isSuccess()){ System.out.println("成功"); }else{ System.out.println("失败"); } } catch (TrxException e

验签

1,验签的输入 签名的验证有3个输入: (1)密码(用于签名的种子);(2)签名本身;(3)公钥 2,验签的应用场景 邮件的加密发送 具体步骤: 插上key,key中包含私钥和签名; 弹框要求输入密码; 使用公钥和签名来验证签名,如果密码不对,则验签失败; 若验签成功,则产生随机秘钥E; 使用随机秘钥E加密邮件内容M,得到M2; 使用对方的公钥对E进行加密,得到E2; 把M2,E2,发送给对方. 对方收到之后,使用私钥对E2,进行解密,得到E; 使用E对M2进行解密得到明文邮件.

md5-MD5认证 验签失败 解决认证问题

问题描述 MD5认证 验签失败 解决认证问题 抓包修改数据后,总是显示验签失败,应该是MD5认证解决不了,请问这个有办法解决吗 解决方案 不知道在弄什么,按文档要求的加密算法来进行加密和验签

工行验签问题,求做过工行支付接口的人帮忙看看。本人不胜感激。

问题描述 工行验签问题,求做过工行支付接口的人帮忙看看.本人不胜感激. 工行B2C支付成功之后的解析验签报错:javax.crypto.BadPaddingException: unknown block type ,i = -1.i = 0 时才是验签正确,求做过的大神指导一下 .. 解决方案 帮顶!同求!和楼主一样也被工行借口无限蹂躏