2009-11-23 3 views
1

PKCS # 1 패딩을 사용하여 RSA에서 SHA-1 알고리즘을 사용하여 문자열에 디지털 서명을해야합니다. Delphi 프로그래밍 언어와 함께 사용하기 위해 Turbo Power Lockbox를 다운로드했습니다.디지털 서명 키 (Lockbox 포함)

previous question에서 개인 키를 PEM 형식에서 DER 형식으로 변환하는 방법을 배웠습니다 (올바르게 이해하면 ASN.1 형식이며 Lockbox와 함께 사용됩니다). \ 임시 \의 myrsakey.der :

C

다음
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를 생성하는 방법입니다

은 내가 SignString에서 다음 코드에서 "0으로 나누기"오류를 무엇입니까 : \ openssl \ bin \ openssl req -x509 -nodes -days 365 -newkey rsa : 1024 -sha1 -subj "/ C = US/ST = CA/L = 마운틴 뷰/CN = www.mycompany.com"-keyout myrsakey .pem -out c : \ temp \ myrsacert.pem

PEM로 변환하려면 다음을 사용 데르 :

C를 : \ OpenSSL을 \ 빈 \하려면 openssl RSA -inform PEM -outform DER -in C : \ TEMP \ myrsakey.pem -out C : \ 임시 \의 myrsakey.der을

제로 오류로 나누기가 발생하는 이유는 무엇입니까?

답변

2

OpenSSL로 생성하는 개인 키는 Lockbox에 필요한 형식과 다릅니다.
OpenSSL이 Lockbox 호환 키를 생성하기 위해 OpenSSL이 필요한 경우 (OpenSSL이 가능할지라도) 필요한 사항을 해결하지 못했지만 이전 질문을 통해 이미 키/인증서가 있다고 판단하므로 Lockbox를 사용하여 키를 생성하는 것은 아마도 쓸모가 없습니다.

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

그러나 아마도 더 좋은 제안은 Lockbox를 피할 수 있다는 것입니다. 나는 Lockbox를 사용하지 않고 이제는 OpenSSL 라이브러리/dll을 사용하여 Marco Ferrante의 저작물을 사용하여 서명하는 등 직접 사용할 수 있습니다. http://www.disi.unige.it/person/FerranteM/delphiopenssl/
좋은 예가 있으며, OpenSSL 문서.

+0

감사합니다. OpenSSL로 생성 된 키는 LockBox에서 사용할 수 없다고 생각합니다. OpenSSL 라이브러리에 OpenSSLUtils.pas를 제공 할 것입니다. 나는 그것이 의미가 있다고 생각한다. afterall LockBox는 7 세 이상입니다. 도움이된다면 디지털 서명을 사용하여 Google의 AuthSub에 연결하려고합니다. –

+0

반드시 할 수는 없다는 말은하지 않습니다. - 노력한 가치가 있는지 확신하지 못합니다 :-) Lockbox는 꽤 오래되었지만 일단 OpenSSL API를 사용하면 제대로 작동합니다. 유니 코드 델파이를 사용한다면 PChar에서 PByte 또는 PAnsiChar로 약간의 변경을해야 할 것입니다. EVP_ * 함수는 원하는 것입니다. – shunty