PHP实现DSA签名,对接JAVA

1 篇文章 0 订阅

对接JAVA, 人家用的是DSA签名, 我先是百度, DSA签名, 信息真的是贼少, 少到了极点, 真的是贼少, 我搞了可久, 害, 走了弯路

一开始用的是phpseclib3的 DSA, 可是他们的DSA签名是自己直接生成了一个密钥对, 人家JAVA给我的有一个密钥了, 不行, 我就开始查非对称加密, 根据自己查到的东西(其实啥也没查到), 去找phpseclib里面的代码, 看看有没有load privateKey的方法, 找了一大圈, 自己照着上面疑似加载的代码写写, 还是不行, 和人家JAVA的对不上, 就放弃了这个, 到最后, 终于找到了, 我先截图, 后上代码, 嘿嘿嘿

这就是代码截图了, 秘钥是人家JAVA给我的, 自己可以先行百度一波 openssl_sign(), 下面上代码,

<?php

$data = 'woaiguohui666';

$res = getPrivateKey($privateKey);
if(!$res)
{
    echo '私钥无效';exit;
}
$sign = '';
$aa = openssl_sign($data, $sign, $res, OPENSSL_ALGO_DSS1); // openssl_sign 默认是OPENSSL_ALGO_SHA1, 但是咱们是DSA签名, 用这个OPENSSL_ALGO_DSS1, 主要还是看JAVA那边是什么签名, 对应的就行了
var_dump($aa);
echo '<br/>';
echo '加密: '.base64_encode($sign);
echo '<br/>';
$res2 = getPublicKey($publicKey);
if($rse2)
{
    echo '公钥无效';exit;
}
$res3 = openssl_verify($data, $sign, $res2, OPENSSL_ALGO_DSS1);
var_dump($res3);
echo '<br/>';
echo '解密: '.$data;

/**
 * 获取私钥,如是私钥可用,则返回资源对象,不合法返回false
 * @param string $strPrivateKey 密钥字符串
 * @return resource 资源对象
 */
function getPrivateKey($strPrivateKey){
    $pem = "-----BEGIN RSA PRIVATE KEY-----\n".
    wordwrap($strPrivateKey, 64, "\n", true).
    "\n-----END RSA PRIVATE KEY-----";
    
    $privateKey = openssl_pkey_get_private($pem);
    
    return $privateKey;
}


function getPublicKey($strPublicKey){
    $pem = "-----BEGIN PUBLIC KEY-----\n".
    wordwrap($strPublicKey, 64, "\n", true).
    "\n-----END PUBLIC KEY-----";
    
    $publicKey = openssl_pkey_get_public($pem);
    
    return $publicKey;
}

这上面的就是代码了, 公钥和私钥我就不发了, 毕竟是人家JAVA给我的, 露出来不咋好, 如果有需要的话直接私我, 我天天都登陆CSDN, 最多一天我就会回, 亲测可用, 下面就是结果, 我自己运行的结果

搞了一天多, 真累啊, 不过还好都出来了, 哈哈哈

小李大人

爱生活爱慧姐

2021-5-20 17:43:27

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值