Node.js与PHP之间通过RSA算法实现签名验证

Node.js与PHP之间通过RSA算法实现签名验证

做过web开发的同学都知道我们经常在接口间交互的时候为了防止数据伪造并 且保证安全性我们会采用签名的方式进行验证, 签名的算法我们一般选择RSA非对称加密算法。想了解更多签名与RSA算法知识可以去查阅PKCS#1、PKCS#7相关资料。

笔者在做利用Node.js做单点登录的时候涉及到了Node.js项目中产生的签名,然后需要到PHP项目中去验签,具体实现如下。

首先准备RSA公钥和私钥,格式均为PEM

openssl产生pem格式私钥

openssl genrsa -out private_key.pem 1024

openssl产生pem格式公钥

openssl rsa -in private_key.pem -pubout -out public_key.pem

Node.js中实现签名和验证

默认签名后转换成hex格式

 var crypto = require('crypto');
 function  rsaSign(key, data,encode){
        var sign = crypto.createSign('RSA-SHA256');
        sign.update(data);
        var sig = sign.sign(key, encode||'hex');
        return sig;
    }
   function rsaVerify(pubKey, sig, data,encode){
        var verify = crypto.createVerify('RSA-SHA256');
        verify.update(data);
        return verify.verify(pubKey, sig, encode||'hex');
    }

PHP中实现签名和验证

对应的hex转码的验签

function verifySign($pubKey,$data,$sign){
    $beginIndex=0;
    $signHexStr='';
    for(;;){
        if ($beginIndex>=strlen($sign)){
            break;
        }
        $charCode=substr($sign,$beginIndex,2);
        $signHexStr.=chr(hexdec($charCode));
        $beginIndex+=2;
    }
    return openssl_verify($data,$signHexStr,$pubKey,'sha256WithRSAEncryption');
}

Node.js中使用

let signature=rsaSign(config.key.private,'plantext')
console.log(signature)
let r=rsaVerify(config.key.public,signature,'plantext')
console.log(r)

PHP中使用

verifySign($key,'plantext',$sign); 

关于如何在Node.js和PHP之前通过RSA算法实现签名验证就介绍到这里,还是比较简单的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UsherYue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值