2009-11-23 132 views
1

我必须使用带RSA的SHA-1算法使用PKCS#1填充对数字签名进行字符串签名。我已经下载Turb​​o 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:

Ç :\ 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退房手续C:\ TEMP \ myrsakey.der

任何想法,为什么我通过零错误得到除法?

回答

2

您使用OpenSSL生成的私钥与Lockbox需要的私钥格式不同。
我还没有计算出你需要OpenSSL生成一个Lockbox兼容密钥(即使OpenSSL能够)所需的咒语,但是根据你以前的问题判断你已经有密钥/证书,所以我的第一个想法是使用锁箱生成密钥可能是没有用的:

mLbRSASSA := TLbRSASSA.create(nil); 
    mLbRSASSA.KeySize := aks1024; 
    mLbRSASSA.GenerateKeyPair; 
    mLbRSASSA.PrivateKey.StoreToFile(mykeyname); 

但是,也许更好的建议是,你可以完全避免锁箱。我已经停止使用Lockbox,现在直接使用OpenSSL library/dll来使用Marco Ferrante的工作来签名等: http://www.disi.unige.it/person/FerranteM/delphiopenssl/
这里有很好的例子,一旦将它与阅读OpenSSL文档。

+0

谢谢,很有帮助。我认为你所说的使用OpenSSL生成的密钥不能与LockBox一起使用。我将尝试OpenSSL库(OpenSSLUtils.pas)。我想这是有道理的;毕竟LockBox已超过7岁。如果有帮助,我试图通过数字签名与谷歌的AuthSub接口。 – 2009-11-23 15:59:55

+0

不一定说它不能完成 - 只是不确定它值得付出的努力:-)如上所述,Lockbox非常古老,一旦你掌握了OpenSSL API,它就可以很好地工作。忘了补充一点,如果你使用的是unicode Delphi,那么你需要从PChar到PByte或PAnsiChar从该网站的pas文件中进行一些更改。 EVP_ *功能是你想要的。 – shunty 2009-11-23 16:15:33