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

简介: Node.js与PHP之间通过RSA算法实现签名验证做过web开发的同学都知道我们经常在接口间交互的时候为了防止数据伪造并 且保证安全性我们会采用签名的方式进行验证, 签名的算法我们一般选择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算法实现签名验证就介绍到这里,还是比较简单的。

目录
相关文章
|
3月前
|
移动开发 JavaScript 前端开发
JavaScript:验证输入
【9月更文挑战第02天】
47 6
|
2月前
|
JavaScript Java PHP
快速对比:Django、Spring Boot、Node.js 和 PHP
快速对比:Django、Spring Boot、Node.js 和 PHP
95 7
|
4月前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
4月前
|
JavaScript 算法 前端开发
JS算法必备之Array常用操作方法
这篇文章详细介绍了JavaScript中数组的创建、检测、转换、排序、操作方法以及迭代方法等,提供了数组操作的全面指南。
JS算法必备之Array常用操作方法
|
3月前
|
JavaScript 前端开发 API
JavaScript 验证 API
JavaScript 验证 API
35 2
|
4月前
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
137 1
|
4月前
|
JavaScript 算法 前端开发
"揭秘Vue.js的高效渲染秘诀:深度解析Diff算法如何让前端开发快人一步"
【8月更文挑战第20天】Vue.js是一款备受欢迎的前端框架,以其声明式的响应式数据绑定和组件化开发著称。在Vue中,Diff算法是核心之一,它高效计算虚拟DOM更新时所需的最小实际DOM变更,确保界面快速准确更新。算法通过比较新旧虚拟DOM树的同层级节点,递归检查子节点,并利用`key`属性优化列表更新。虽然存在局限性,如难以处理跨层级节点移动,但Diff算法仍是Vue高效更新机制的关键,帮助开发者构建高性能Web应用。
80 1
|
4月前
|
前端开发 微服务 API
微服务浪潮下的JSF革新:如何在分散式架构中构建统一而强大的Web界面
【8月更文挑战第31天】随着微服务架构的兴起,企业将应用拆分成小型、独立的服务以提高系统可维护性和可扩展性。本文探讨如何在微服务架构下构建和部署JavaServer Faces (JSF) 应用,通过RESTful服务实现前后端分离,提升灵活性和适应性。
65 0
|
4月前
|
JavaScript PHP 开发者
PHP中的异常处理与自定义错误处理器构建高效Web应用:Node.js与Express框架实战指南
【8月更文挑战第27天】在PHP编程世界中,异常处理和错误管理是代码健壮性的关键。本文将深入探讨PHP的异常处理机制,并指导你如何创建自定义错误处理器,以便优雅地管理运行时错误。我们将一起学习如何使用try-catch块捕获异常,以及如何通过set_error_handler函数定制错误响应。准备好让你的代码变得更加可靠,同时提供更友好的错误信息给最终用户。
|
4月前
|
存储 JavaScript 前端开发
js登陆验证
js登陆验证
41 0
下一篇
DataWorks