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

时间: 2024-09-23 01:11:52

Node.js与PHP之间通过RSA算法实现签名验证的相关文章

在 Node.js 和 C++ 之间使用 Buffer 共享数据

本文讲的是在 Node.js 和 C++ 之间使用 Buffer 共享数据, 使用 Node.js 开发的一个好处是简直能够在 JavaScript 和 原生 C++ 代码之间无缝切换 - 这要得益于 V8 的扩展 API.从 JavaScript 进入 C++ 的能力有时由处理速度驱动,但更多的情况是我们已经有 C++ 代码,而我们想要直接用 JavaScript 调用. 我们可以用(至少)两轴对不同用例的扩展进行分类 - (1)C++ 代码的运行时间,(2)C++ 和 JavaScript

Node.js 和 C++ 之间的类型转换

我非常喜欢使用 Node.js,但是当涉及到计算密集型的场景时 Node.js 就不能够很好地胜任了.而在这样的情况下 C++ 是一个很好的选择,非常幸运 Node.js 官方提供了C/C++ Addons 的机制让我们能够使用 V8 API 把 Node.js 和 C++ 结合起来. 虽然在 Node.js 官方网站有很多的关于怎么使用这些 API 的文档,但是在 JavaScript 和 C++ 之间传递数据是一件非常麻烦的事情,C++ 是强类型语言("1024" 是字符串类型而不

提升 Node.js 应用性能的 5 个技巧

"如果nginx没有在你的节点服务器之前,那么你可能就错了."Bryan Hughes在Twitter上说 Node.js是全球领先的用JavaScript--世界上最流行的编程语言创建服务器应用程序的工具.提供web服务器和应用服务器的功能,Node.js被认为是各种以微服务为基础的开发和交付的关键工具. (下载关于Node.js和NGINX的免费Forrester报告.) Node.js可以替代或增强Java和.NET用于后端应用程序的开发. Node.js是单线程的,并且使用非阻

[译] 在你沉迷于包的海洋之前,还是了解一下运行时 Node.js 的本身

本文讲的是[译] 在你沉迷于包的海洋之前,还是了解一下运行时 Node.js 的本身, 原文地址:Before you bury yourself in packages, learn the Node.js runtime itself 原文作者:该文章已获得作者 Samer Buna 授权 译文出自:掘金翻译计划 译者:fghpdf 校对者:rccoder,reid3290 在你沉迷于包的海洋之前,还是了解一下运行时 Node.js 的本身 这篇文章将挑战你 Node.js 的知识极限. 我

《写给PHP开发者的Node.js学习指南》一第 2 章 简单的Node.js框架2.1 HTTP服务器

第 2 章 简单的Node.js框架 写给PHP开发者的Node.js学习指南 在之前的章节,我介绍了一个用于PHP到Node.js转换的开发环境,以及如何使用它进行转换.在本章,我们将开始使用这个开发环境并进行实际的转换. 2.1 HTTP服务器 写给PHP开发者的Node.js学习指南 在PHP中,一个PHP文件代表一个HTML页面.一个Web服务器,比如Apache,当请求一个PHP页面时,Web服务器会运行PHP.但是在Node.js里,Node.js的main文件代表了整个服务器.No

深入解析桶排序算法及Node.js上JavaScript的代码实现_node.js

1. 桶排序介绍桶排序(Bucket sort)是一种基于计数的排序算法,工作的原理是将数据分到有限数量的桶子里,然后每个桶再分别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序).当要被排序的数据内的数值是均匀分配的时候,桶排序时间复杂度为Θ(n).桶排序不同于快速排序,并不是比较排序,不受到时间复杂度 O(nlogn) 下限的影响. 桶排序按下面4步进行: (1)设置固定数量的空桶. (2)把数据放到对应的桶中. (3)对每个不为空的桶中数据进行排序. (4)拼接从不为空的

Node.js V0.12新特性:Cluster轮转法负载均衡

回顾Node内置的cluster模块 Node.js固有的单线程模型经常被认为是它的一个软肋.不管你的机器上有多少CPU内核,Node.js能用上的也仅仅是其中之一(某些操作会被有条件地卸载到线程池中.大多数程序只是在CPU的总时间上分了一杯羹,所以更好地利用可用的处理能力并不能起到多大作用). 所以Node.js从v0.8开始,新增加了一个内置的'cluster'模块.你可以用cluster模块设置一个主进程作为管理者,由一或多个工人进程完成实际工作. 让创建"发完就忘"的多进程服务

Node.js V0.12新特性:性能优化

v0.12悠长的开发周期(已经过去九个月了,并且还在继续,是有史以来最长的一次)让核心团队和贡献者们有充分的机会对性能做一些优化.本文会介绍其中最值得注意的几个. 支持塞住模式的可写流 现在可写流可以支持"塞住(corked)"模式,类似于你执行man tcp时见到的socket选项TCP_CORK和TCP_NOPUSH. 当被塞住时,写到流中的数据会排队直到流被重新开塞(uncorked).这样Node.js可以将比较小的写操作合并成比较大的,从而减少系统调用和TCP往返. http

机器学习成功检测糖尿病性视网膜病变,Realm为Node.js发布对象数据库

[12.01资讯速递]本次播报内容有:JetBrains Rider:一款全新的基于IntelliJ和ReSharper的.NET IDE:华为发布业界首个物联网建网方法论:英特尔人工智能论坛在京召开:首个基于Android 7.0的OxygenOS Beta版更新:Spark for Mac正式上架Mac App Store:交大教授训练机器看脸识罪犯:成功使用机器学习来检测糖尿病性视网膜病变:SpaceX计划构建太空互联网:人工智能vs人类智能:人机结合才是未来:Realm为Node.js发