代码之家  ›  专栏  ›  技术社区  ›  M Schenkel

使用密码箱读取PEM格式的私钥

  •  2
  • M Schenkel  · 技术社区  · 15 年前

    我必须使用sha-1算法和rsa使用pkcs 1填充对字符串进行数字签名。我下载了涡轮动力锁箱。

    我拥有的私钥是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');
    

    在loadfrom文件中,我得到一个“无效的RSA密钥”错误。我做错什么了?密码箱是否支持PEM格式的密钥?没有一个例子能说明这一点;一切似乎都是ASN格式的。

    1 回复  |  直到 10 年前
        1
  •  3
  •   jheddings    15 年前

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

    首先,确保为实际应用程序生成新的私钥。既然您已经和我们共享了您的私钥,我们就不希望在那里有任何开放的安全漏洞。

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

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

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

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

    2) 你可以用 -outform DER 使用openssl生成密钥时的参数。

    我不确定这是否适用于您的申请,但也许它会帮助您做得更进一步。

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

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