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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yue7603835/article/details/76502660

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算法实现签名验证就介绍到这里,还是比较简单的。

猜你喜欢

转载自blog.csdn.net/yue7603835/article/details/76502660