delphi - 使用 LockBox 读取 PEM 格式的私钥

标签 delphi cryptography openssl

我必须使用 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 key ”错误。我究竟做错了什么? Lockbox 是否支持 PEM 格式的 key ?这些例子都没有说明;一切似乎都是 ASN 格式

最佳答案

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

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

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

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

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

或者,因为您无论如何都要创建一个新 key ...;)

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

我不确定这是否适合您的应用程序,但也许它会帮助您更进一步。

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

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

关于delphi - 使用 LockBox 读取 PEM 格式的私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1780782/

相关文章:

delphi - 如何在 DevExpress TcxGrid 中进行自动换行?

delphi - 监视单个文件更改的最简单方法是什么?

c++ - 英特尔® TinyCrypt : how to use AES-128/CTR

java - AES 256 位加密 - java.security.InvalidAlgorithmParameterException : Wrong IV length: must be 16 bytes long

c++ - 使用 openssl 封装数据包

delphi - 如何检测应用程序中的表单是否被破坏?

delphi - 桌面 Delphi 应用程序是否可以通过 Windows 8 认证(使用 Windows 应用程序认证套件)?

c# - 将一个 CryptoStream 封装在多个其他 CryptoStream 中会提高安全性吗?

c++ - SSL 握手产生 BIO 错误

java - 将 Java keystore 转换为 PEM 格式