php java sha1_PHP 种的 SHA1WithRSA

本文记录了一次使用PHP与Java进行RSA接口对接时遇到的问题及解决方案。主要难点在于理解RSA密钥的格式,并正确实现SHA1WithRSA签名的生成与验证。通过调整密钥格式,最终成功实现了PHP端的加密和验签功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近和java对接接口看文档就是rsa 一开始怎么也调不通;以为就是rsa 加密一把 他们只给一个key 一个字符串

MIIBVAIBADxxxxxxxEAAkEApWBS7aJbksmufLQZ889vhw5Uy93xGOqe3/YS5/trqgDMA9iZKNxttyBnU7ffj0c3bas7jUklZRnGlO7Tb+Aa8QIDAQABAkBeA7GBSKB4hVE9sYFjepSzmbEZKLYsbQ0e0xySZvsg7GMJFjFAbcFaqD7W4bFbG34QKvrEELbmRyxxxxx0yApG/yJPJlCXzN5Iaavcszx1al7mKPK8PECIQDIhtVhmgYEIM3W/TxxxxxxxxxxxxxJZ38VSU42phAEDBeq59IKkc15hyBQSgXnuM0x2yfszBAiBjS4D155L7ExxxxVhU/F/lMD7oOGoAQIgEM5LXv1q8Suf1oIDetZB4T7jMQ4vgRpQfR0g8YEFR/Y=

我就简单的调用

$pu_key = openssl_pkey_get_private($interface_key); 会报错 // openssl_pkey_get_private(): key param is not a valid private key

var_dump($pu_key)

openssl_private_encrypt($sign, $resSign, $pu_key);

其实正规生成的pem 文件格式确实不和前面一样;最后让java给一个java的demo 最后看到SHA1WithRSA 就网上搜了一下php的实现

//生成 sha1WithRSA 签名

function genSign($toSign, $privateKey){

//这里他是拼接成和pem文件一样的格式

$privateKey = "-----BEGIN RSA PRIVATE KEY-----\n" .

wordwrap($privateKey, 64, "\n", true) .

"\n-----END RSA PRIVATE KEY-----";

$key = openssl_get_privatekey($privateKey);

openssl_sign($toSign, $signature, $key);

openssl_free_key($key);

$sign = base64_encode($signature);

return $sign;

}

//校验 sha1WithRSA 签名

function verifySign($data, $sign, $pubKey){

$sign = base64_decode($sign);

$pubKey = "-----BEGIN PUBLIC KEY-----\n" .

wordwrap($pubKey, 64, "\n", true) .

"\n-----END PUBLIC KEY-----";

$key = openssl_pkey_get_public($pubKey);

$result = openssl_verify($data, $sign, $key, OPENSSL_ALGO_SHA1) === 1;

return $result;

}

//测试

$privateKey = "xx....";

$pubKey = "xxx....";

//生成签名

$sign = genSign("test", $privateKey);

//校验签名

$rs = verifySign("test", $sign, $pubKey);

var_dump($rs);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值