【问题标题】:Reading Private Key in PEM format with LockBox使用 LockBox 读取 PEM 格式的私钥
【发布时间】:2009-11-23 02:11:33
【问题描述】:

我必须使用 SHA-1 算法和 RSA 使用 PKCS#1 填充对字符串进行数字签名。我已经下载了 Turbo Power Lockbox。

我拥有的私钥是 PEM 格式,是使用 openssl 创建的:

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -sha1 -subj 
    "/C=US/ST=CA/L=Mountain View/CN=www.mycompany.com" 
    -keyout  myrsakey.pem -out c:\temp\myrsacert.pem

这是它的样子:

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDFzvqdAEQn9MrSLTNua5SOxshV/8jQIf3qpfunBXa9SVdm4NJw
lY7iYpwivw7EdMlBe4FmezN9LGwyIokcUSt4KUdWmA8l4Lm5rcuDzzfmlVWP7y+j
0GKG2XCp2JwHpW4Q5WiMgcAnCMD/gbDustfz3utxQhLNBdWp2MlrEH2/rQIDAQAB
AoGAUMZmnHohWtehgxYmLG8N6QfPgx7CWAupbop9KwUWKdGrOT2RcZwBDv0JmT6/
vwWZsX3Hp5ujuPfM7uQfbUrQHrcruUg/fPY8YXcWgNfOytGpaN/XKxfy2g2Cp8mE
4yoDR2QW8jo25ZH1q1cJ3jMyX9xlXaSZm7qtaoiDydE6roECQQDxqtP2tMEZ2FmQ
2o4T5Zv7P4II2PrLq+9IP0ASCZ2VzLxm2Pk6kxjnPjZ2oHG8pUQHvMz0m8Br3BY8
X1BpXrj9AkEA0YpBH7qm/nbG6YjxKAL3PbxXUJ06T/ByLjfstfCrT3LxDeklfWJb
n/V8ahRcKPLajdbKAuWvJA5NvjeJPi34cQJAZ+vD1nUIDKsiaM3zBs9X8gTvUAqu
XmMDNJguXxNPdplh8wAevHeA3/+6v+xivHJ8/K7Nm+pWJouv7Co4k/ctqQJASV4y
TUzKmgC2xyCG5+6Z6Ujf/b7/ouva3un//PiG0yu40ZkX4l4lHM4UwQPd/QyDj/Rs
CTWo7GQBvp+tc1MfUQJBALnQnNOIIkvwIK+1J6iLZgh7GurbCPMrH8nSn8SxkfBe
qq5JWo31LQAUNDW5ntG0qHZQpx6zm2MzIlt2NgOLf4s=
-----END RSA PRIVATE KEY-----

如果我没记错的话,我要使用的组件是 TLbRSAKey。所以我尝试创建关键对象并从文件中读取它:

var
  mPrivateKey: TLbRSAKey;
begin
  mPrivateKey := TLbRSAKey.Create(aks1024);
  mPrivateKey.LoadFromFile('C:\temp\myrsakey.pem');

在 LoadFromFile 上,我收到“无效的 RSA 密钥”错误。我究竟做错了什么?密码箱是否支持 PEM 格式的密钥?这些例子都没有说明;一切似乎都是 ASN 格式

【问题讨论】:

标签: delphi cryptography openssl


【解决方案1】:

我不是 delphi 程序员,但我想我会尝试提供一些指针。

首先,确保为您的真实应用程序生成一个新的私钥。现在您已经与我们共享了您的私钥,我们不希望有任何公开的安全漏洞。

其次,ASN.1 格式是使用 OpenSSL 的 DER 输出生成的。 PEM 格式只是二进制 ASN.1 结构的 base-64 编码(并添加了标记)。

您可以通过以下两种方式之一返回 DER:

1) 您可以解析和解码 PEM 信封中的 base-64 数据。为此,只需解码-----BEGIN/END RSA PRIVATE KEY----- 标记之间的数据。

或者,既然您正在创建一个新密钥... ;)

2)当您使用 OpenSSL 生成密钥时,您可以使用 -outform DER 参数。

我不确定这是否适用于您的应用程序,但也许它会帮助您走得更远。

提示要将 PEM 证明密钥转换为 DER 格式,请使用 OpenSSL 中的 rsa 实用程序:

openssl rsa -inform PEM -outform DER -in privkey.pem -out privkey.der

【讨论】:

  • 这有帮助。我想我在数据格式上有一个脱节。我做了你在 (2) 中所说的,即添加 -outform DER 参数。它生成了证书和密钥。证书似乎是正确的,我可以在 Windows 中双击它,它包含所有信息。但是私钥仍然在带有标记的 Base64 中出现。我也尝试了 -keyform DER 参数,但得到了相同的结果。
  • 不幸的是,我认为没有办法直接创建 DER 格式的私钥。相反,我添加了将您的私钥转换为 DER 格式的提示。
  • 好的 - 我已经根据 jheddings 成功地将我的私钥转换为 DER 格式(我已经更新了我的问题以反映这一点)。但现在我得到了零误差除法。 jheddings - 谢谢,但我认为这就是它转向 Delphi 的地方。
猜你喜欢
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
相关资源
最近更新 更多