2009-11-23 131 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