我必须使用带有RSCS的SHA-1算法使用PKCS#1填充对字符串进行数字签名。我已经下载了Turbo Power Lockbox以与Delphi编程语言一起使用。
在previous question中我学会了如何将私钥从PEM格式转换为DER格式(如果我理解正确的是ASN.1格式并与Lockbox一起使用)。
我在SignString的以下代码中遇到“除以零”错误:
uses LbRSA,lbAsym,LbDSA;
procedure TForm1.Button1Click(sender: TObject);
var
mPrivateKey: TLbRSAKey;
mLbRSASSA : TLbRSASSA;
begin
mPrivateKey := TLbRSAKey.Create(aks1024);
mPrivateKey.LoadFromFile('C:\temp\myrsakey.der');
mLbRSASSA := TLbRSASSA.create(nil);
mLbRSASSA.HashMethod := hmSHA1;
mLbRSASSA.PrivateKey.Assign(mprivateKey);
mLbRSASSA.SignString('sign this message');
以下是我如何生成c:\ temp \ myrsakey.der:
c:\ openssl \ bin \ 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
使用以下命令从PEM转换为DER:
c:\ openssl \ bin \ openssl rsa -inform PEM -outform DER -in c:\ temp \ myrsakey.pem -out c:\ temp \ myrsakey.der
任何想法为什么我得到零误差的划分?
答案 0 :(得分:2)
您使用OpenSSL生成的私钥与Lockbox所需的格式不同 我还没有弄清楚你需要OpenSSL生成一个Lockbox兼容密钥所需要的咒语(即使OpenSSL能够)但是根据你之前的问题判断你已经有一个密钥/证书所以我的第一个想法是使用Lockbox生成密钥可能没用:
mLbRSASSA := TLbRSASSA.create(nil);
mLbRSASSA.KeySize := aks1024;
mLbRSASSA.GenerateKeyPair;
mLbRSASSA.PrivateKey.StoreToFile(mykeyname);
然而,或许更好的建议是你可以完全避免使用Lockbox。我已经停止使用Lockbox,现在使用Marco Ferrante的作品直接使用OpenSSL库/ dll进行签名等:
http://www.disi.unige.it/person/FerranteM/delphiopenssl/
那里有很好的例子,一旦你把它与OpenSSL文档的阅读结合起来就会有意义。