从节点js中的存储文件中读取公钥和私钥

里特维克·乔希(Ritvik Joshi)

我想使用存储在系统中的公钥和私钥对节点中的消息进行加密和解密。我正在使用以下Java代码读取文件并使用键。

Java代码:

byte[]  keyBytes = Files.readAllBytes(new File(publicKeyFileName).toPath());
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
KeyFactory kf = KeyFactory.getInstance("RSA");
publicKey=kf.generatePublic(spec);

我可以使用上述java方法,而不会从文件中读取公钥。但是,我想在节点中实现类似的功能。我尝试使用加密来实现相同的目的,但是在将密钥传递给publicEncrypt方法时却给了我错误

节点:

var encryptStringWithRsaPublicKey = function(toEncrypt, relativeOrAbsolutePathToPublicKey) {
    var absolutePath = path.resolve(relativeOrAbsolutePathToPublicKey);
    var publicKey = fs.read(absolutepath, "utf-8");
    console.log(publicKey);
    var buffer = Buffer.from(toEncrypt);
    var encrypted = crypto.publicEncrypt(publicKey, buffer);
    return encrypted.toString("base64");
};

错误

internal/crypto/cipher.js:43
    return method(toBuf(key), buffer, padding, passphrase);
           ^

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line

请帮忙。谢谢

迈克尔·菲尔

您的问题出在Java实际使用的文件格式中。您可能以编码(“字节数组”)的形式将私有和公共文件保存到文件中,然后使用X509EncodedKeySpec重建密钥。

此格式与Node.JS不兼容,您有3种解决方法:

a)用必要的格式用Java编写密钥,以便在Node.JS中使用

b)您在Node.JS中编写一个转换器以获取正确的格式

c)您使用OPENSSL之类的工具转换文件。

在这里,我向您展示“ c-way”,因为您仅处理一个密钥对,并且可能不需要编程解决方案。

假设您有两个文件,它们具有私钥(“ rsa_privatekey_2048.der”)和公钥(“ rsa_publickey_2048.der”)。

在OPENSSL中,您将命令行与

openssl rsa -inform der -in rsa_privatekey_2048.der -outform pem -out rsa_privatekey_2048.pem
openssl rsa -inform der -pubin -in rsa_publickey_2048.der -outform pem -RSAPublicKey_out -out rsa_publickey_2048.pem

将文件转换为PEM编码格式。

在下面,您可以找到我创建的两个示例文件。

rsa_privatekey_2048.pem:

-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAmbeKgSAwVe0nZ84XlbDhMkUDjx1C0duA16MkzHTg1uh9SouO
KK0e3gPtTJ9LssaHlXSYhjpMDMWGO6ujd85XRosI2u9eSMNRYY25AQuBriSTVdi9
BHqWAuWuo6VuvTrkgWTL69vNWvLXTOkTiIyrgnhiavjNvm4UVy2AcO2Y3ER+dKgJ
pQAYlEP1jvuQuf6dfNdSBoN0DZbxZXYbQqoA9R/u0GZHCXY+r8A54RejG34pnnuH
koyROZz5H9LbKGOiaETryornQ1TRvB/p9tgIoCJFI71WsKsqeWQPG3Ymg/FoEWXN
Y0yopZEjpkZa3tU+hrOmAFIRg+/bedKfjYFi/QIDAQABAoIBAD3XZ3N3fbq0BExw
z3A7jv3oYfwrq3w+MOGQEvfmdaZANlfNOU4ICAkNz2QqGgw8bsOj+tDVl070EILl
FIjYjKgmu1NJRcdEPPNgTvOqq2th75xz6+dnYf6cZNwVbC3ZCaE86gVjkoRqek/I
3UDsRvvgbsfWfP+Fzc0c0zWbgQnsK6qivU1uzJX+5xsvgQlZboeZOO2lsdQMgfnu
iGlW1bVVM4Sy7AngqfiKMzihUnYEBIi0Y+mfxAPcBLUW8mrOvIOPPuNNUPxUtkBF
bDEzZ6loXCLLD8UBqXeDbCUPPFdTGcc7INhVgFdl2FL6rHB0+p6eUt8MI/XkZI2d
2AnkBUkCgYEA34cKLs2l5bPjyKybbj6ZG7RhDRsnPypEGU63DMV21twISqt7ZQNv
i3iTP+FYHM3ImECbNRIOZpyLuWLPmh5+5egQH13jRDempoxVSVcghbIserlCz2EU
nD2V6ZKuaDbn395O6Qe/PE/yKHLWbXwJrBBm+o7GGNm/Jd3KJib23PcCgYEAsAxB
esEsxxL8hqg/qf+ij7JJt492svpK/6QXhqeeP/FVOtYSgoNtSrXh9qahGpzMSF0m
FqwIgrOX0RkK3v6ofGVfIKObxOVyhwddS1Ru+SnjBFnTMKS57q0WNrIrBNM6Q0xE
Wd3tiljwmg8xF90U/BXu+m0v5XWKxSn7VLiCBqsCgYEAgl0xtSY/EP6fZJQ2ek+L
4DqNN6WUeCRgXxonbA1mR91AALyOVNVyIreJuYHlb7ccvJ9BZexH9dRrMQ3N4ibS
/6cecAzD1S9XxF6oBwQHdbH6ewC9VFFcQdsxKW5gxWrwRQJUp1fbUoOVyb1gDa5/
vZg7VvoZ0rh74Mu/cAzdgPUCgYEAiNANdwt29AKyUyefykpLGCczGL8aPP88l6z7
R38uAX1Ygg/pdJoUrnHo+FkIbHkcXMRfHFF3j7NoMWynwSLg50OUiPX80SiLN5qm
iytDzskZjsEL2gq6IF1NHRabTfWlmrVDjR9mQhTabq+NtIDwlPOqs9100nrlbFIy
6uU0z18CgYEAkDxQg5UjOzbYIighp/e0LkfKlwUE/cMtISUq1A6Yio9AKZYdBV8p
dd4osUW0gZvDflXlQaBIaNlOwl035lyEZtyuKmFh1oSmoir/TTMbIk0avSgKCLGg
fnhabaQRHl4RdXWcEsioRv3aZUsGkb46Y8xODyAUPRHBPhBsd71gnZ8=
-----END RSA PRIVATE KEY-----

rsa_publickey_2048.pem:

-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAmbeKgSAwVe0nZ84XlbDhMkUDjx1C0duA16MkzHTg1uh9SouOKK0e
3gPtTJ9LssaHlXSYhjpMDMWGO6ujd85XRosI2u9eSMNRYY25AQuBriSTVdi9BHqW
AuWuo6VuvTrkgWTL69vNWvLXTOkTiIyrgnhiavjNvm4UVy2AcO2Y3ER+dKgJpQAY
lEP1jvuQuf6dfNdSBoN0DZbxZXYbQqoA9R/u0GZHCXY+r8A54RejG34pnnuHkoyR
OZz5H9LbKGOiaETryornQ1TRvB/p9tgIoCJFI71WsKsqeWQPG3Ymg/FoEWXNY0yo
pZEjpkZa3tU+hrOmAFIRg+/bedKfjYFi/QIDAQAB
-----END RSA PUBLIC KEY-----

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从作业中的密钥存储中读取公钥和私钥?

IT安全中公钥和私钥的基础

从私钥模数和私钥指数中获取 RSA 公钥

ssh-keygen - 从存储在 s3 中的私钥文件创建公钥文件

从文件中读取公钥或私钥时,如何解决“无效的密钥格式”?

如何将私钥和公钥存储到KeyStore中

Google Cloud 和 WinSCP 中的公钥和私钥

在Java中以十六进制生成公钥和私钥

我可以在ZeroMQ中交换私钥和公钥吗

如何从SSH私钥中检索公钥?

GnuPG / OpenGPG:从私钥中恢复公钥

读取我的公钥和私钥文件时出现问题

私钥和公钥扩展

是否可以将数字签名和签名人的公钥存储在 json 文件中?

如何从节点js中的RSA公钥生成SKI?

如何在Java中读取rsa公钥文件?

如何从.key文件中提取公钥和私钥?

将公钥存储在web.config文件中

如何从包含.Net Core中的私钥/公钥的PEM文件中导入PKCS1密钥

通过PHP中的发送方和接收方之间的公钥验证私钥的签名

如何从我们创建的密钥库中检索我的公钥和私钥

如何在Java中结合私钥和公钥来共享秘密

如何从NEAR协议中的私钥和/或帐户ID获取公钥?

如何仅在C#中获取RSACryptoServiceProvider公钥和私钥

如何以可读的方式读写包含在“ EVP_PKEY”中的公钥和私钥?

我如何知道RSA算法中的公钥和私钥是什么?

在OS X上的“钥匙串访问”中,找到匹配的公钥和私钥

如何存储 RSA 私钥、公钥

在单元测试中模拟私钥/公钥?