node.js的crypto模块Sign签名如何实现与php的openssl_sign相同的算法

2013-09-02 16:03:45 +08:00
 Emory_M
查看php的openssl_sign文档得到signature_alg参数默认使用 OPENSSL_ALGO_SHA1 (integer)
但是在nodejs使用crypto.createSign('RSA-SHA1')算法对字符串进行加签 却无法得到一致的签名
node.js文档中提示使用openssl list-public-key-algorithms来获取算法列表,但是debian获取到的列表并无法直接使用

如何使用node.js crypto.createSign生成与php openssl_sign一致的签名?
12138 次点击
所在节点    Node.js
14 条回复
shiny
2013-09-02 16:10:17 +08:00
上 node 的代码,贴 gist。
Emory_M
2013-09-02 16:27:23 +08:00
shiny
2013-09-02 16:46:56 +08:00
我试了下你提供的代码,是一样的啊。

重新整理的版本: https://gist.github.com/shiny/6410663
shiny
2013-09-02 16:47:44 +08:00
忘记贴图了:
Emory_M
2013-09-02 16:55:29 +08:00
@shiny 能把私钥贴给我吗?
Emory_M
2013-09-02 16:58:35 +08:00
@shiny 我是这样生成 生成私钥的:openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
shiny
2013-09-02 17:07:47 +08:00
我用 ssh-keygen 重新生成了一个 test_rsa 结果一样。上传到了 debian 主机上生成也一样。
你提供的命令行看上去不是生成私钥的,而是根据私钥生成 public_key。

这是生成的 rsa:

https://gist.github.com/shiny/6410836
Emory_M
2013-09-02 17:19:40 +08:00
@shiny 呵呵,贴错了,是 openssl genrsa -out rsa_private_key.pem 1024
shiny
2013-09-02 17:24:36 +08:00
用这个生成的 pem 同样没问题,以下是我的版本信息:
php -v
PHP 5.3.15 with Suhosin-Patch (cli) (built: Dec 9 2012 19:32:02)

openssl
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 0.9.8x 10 May 2012
OpenSSL Header Version => OpenSSL 0.9.8r 8 Feb 2011

node -v
v0.10.12
Emory_M
2013-09-02 18:07:58 +08:00
@shiny

非常感谢
看来是node.js的问题 iOS的openssl库加签和php是一致的
重新编译试试

你的openssl信息是如何打印的?

我的版本如下:
Debian 7.0 64Bit

php -v
PHP 5.4.4-14+deb7u3 (cli) (built: Jul 17 2013 14:54:08)

node -v
v0.10.7

OpenSSL> version
OpenSSL 1.0.1e 11 Feb 2013
shiny
2013-09-02 18:20:36 +08:00
@Emory_M 我用 phpinfo 列的OpenSSL 版本号。

不过我试了下 debian 上的 OpenSSL,版本和你的一样,输出的签名和本地0.9.8x的一样。
Emory_M
2013-09-02 23:57:52 +08:00
@shiny 了解到原因了,如果出现ascii以外的unicode字符那么加签名 结果就不一样了,看来又是node内部编码问题了
Emory_M
2013-09-03 00:12:18 +08:00
signer.update(str,'utf8') 解决
Jaylee
2016-07-14 22:55:17 +08:00
@Emory_M 忒感谢你了 差点放弃 node.js 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/81065

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX