2

我有以下代码:

var crypto = require("crypto");
var fs = require("fs");
var path = require("path");

var signer = crypto.createSign("sha1");
signer.update("abc123");
var key = fs.readFileSync(path.join(__dirname,"sign.key"),"utf8");
var sig = signer.sign(key,"hex");

我尝试过使用“sha1”、“sha”、“sha256”(这是我想要的)和“RSA-SHA256”。无论我做什么,“signer.sign”调用总是返回一个空字符串。

我还在 2 台不同的机器(OSX 和 Linux)上尝试了所有这些

私钥的格式为: -----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY----- 我知道这是正确的,因为我已经成功测试了另一个系统

关于我可能做错的任何想法

4

2 回答 2

2

好的,我找到了答案,所以我将在这里回答自己以防万一有人看到它。

似乎证书文件必须保存ASCII。_

即使您将 ascii 指定为编码,它仍然不起作用。

我不确定这是为什么,因为我希望 V8 将所有字符串标准化为相同的编码(UTF-8?),但显然不是。

于 2012-10-11T21:11:14.460 回答
0

我认为你可以这样做:

var key = fs.readFileSync(path.join(__dirname,"sign.key"),"binary");

希望它有效。

于 2015-02-13T17:28:53.110 回答