OpenSSL Node.js错误没有起始行

时间:2017-10-25 08:05:28

标签: node.js api openssl rsa cryptojs

我开始在node.js为德国Sparkasse(银行提供商)开发一个应用程序。 他们为他们的服务提供API。 German Link to their API

在secondstep中,我从他们的服务器获得了一个RSA-2048-SHA1公钥。 在第四步中,我应该使用该公钥来加密在步骤3中创建的会话密钥,但在加密时使用:

var key = 'password';
var sha256 = crypto.createHash('sha256');
sha256.update(key);
var iv = new Buffer([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);
var cipher = crypto.createCipheriv('aes-256-cbc', sha256.digest(), iv);        
let sessionKey = cipher.final('base64')
let publicKey = response.publicKey.value
crypto.publicEncrypt(publicKey,new Buffer(sessionKey))

我收到以下错误消息,我认为是来自OpenSSL。我真的不知道如何解决这个问题,因为我无法评估我从API获得的publicKey是否有效。

  

错误:错误:0906D06C:PEM例程:PEM_read_bio:无起始线

2 个答案:

答案 0 :(得分:3)

您收到的公钥格式错误。它必须是“PEM”格式化的密钥。您必须通过将其包装在“BEGIN ...”和“END ...”行中进行转换,并可能将其拆分为64个字符行。

以下是格式正确的公钥的示例:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAytBCDJR5/6JAlB7ErBge
22YwN/u0K63wrnCMLde+hQQCYs7pBuYtbyxXF2PBFuHS+ytD9PSpY9t3NiGbk/9U
s9GYCnqaK+vg2hz+T86LjJVkTJe0HWuE6g+HQ9GjyDGiO7ZBQw31HKxHYA2cMMVj
tiO97VKLR9Fp6c6X33uNtdAaUZg57PjyNl6TjPwc52tJz8H5g0aV4tYelsTMaSSE
4nVwPLBoDzZaT84ktW1RuGToC4gEB/bctFrRBVaxp/KSebpds9P2xGMVweWgrvml
cLnHGLKBxcCxh9kbgHS/nrgYXPjj92hxk2se/C7QmYeRSUs4ikEWO06NJ7Cgk+bQ
8wIDAQAB
-----END PUBLIC KEY-----

答案 1 :(得分:0)

您应该在每行新行上输入:/ n

如果将其作为字符串保存在配置文件中,则在Windows上应将其保存为:

  "JWTPRIVATE": "-----BEGIN RSA PRIVATE KEY-----\nMIIJKAIBAAKCA...

只是为了向您展示删除空格之前的外观:

"-----BEGIN PUBLIC KEY-----/n
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAytBCDJR5/6JAlB7ErBge/n
22YwN/u0K63wrnCMLde+hQQCYs7pBuYtbyxXF2PBFuHS+ytD9PSpY9t3NiGbk/9U/n
..."

换行,如您所见:Why does "\n" give a new line on Windows?