Показать сообщение отдельно
  #8  
Старый 25.10.2011, 22:46
maximprada maximprada вне форума
Прохожий
 
Регистрация: 12.10.2011
Сообщения: 12
Репутация: 10
По умолчанию

Нашел вот такой код...

Код:
uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls,
    CHILKATCRYPT2Lib_TLB,
    CHILKATDSALib_TLB,
    OleCtrls;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
crypt: TChilkatCrypt2;
hashStr: String;
dsa: TChilkatDsa;
pemPrivateKey: String;
hexSig: String;
dsa2: TChilkatDsa;
pemPublicKey: String;

begin


//  Use Chilkat Crypt to hash the contents of a file.
crypt := TChilkatCrypt2.Create(Self);
success := crypt.UnlockComponent('Anything for 30-day trial.');
if (success <> 1) then
  begin
    ShowMessage(crypt.LastErrorText);
    Exit;
  end;

crypt.EncodingMode := 'hex';
crypt.HashAlgorithm := 'sha-1';

//  Return the SHA-1 hash of a file.  The file may be any size.
//  The Chilkat Crypt component will stream the file when
//  computing the hash, keeping the memory usage constant
//  and reasonable.
//  The 20-byte SHA-1 hash is returned as a hex-encoded string.
hashStr := crypt.HashFileENC('hamlet.xml');

dsa := TChilkatDsa.Create(Self);

//  The Chilkat Crypt and Chilkat DSA components are separate
//  products.  To license both, it's least expensive to purchase
//  the "Chilkat Bundle" which provides licenses to all the
//  Chilkat components.
success := dsa.UnlockComponent('Anything for 30-day trial');
if (success <> 1) then
  begin
    ShowMessage(dsa.LastErrorText);
    Exit;
  end;

//  Load a DSA private key from a PEM file.  Chilkat DSA
//  provides the ability to load and save DSA public and private
//  keys from encrypted or non-encrypted PEM or DER.
//  The LoadText method is for convenience only.  You may
//  use any means to load the contents of a PEM file into
//  a string.

pemPrivateKey := dsa.LoadText('dsa_priv.pem');
success := dsa.FromPem(pemPrivateKey);
if (success <> 1) then
  begin
    ShowMessage(dsa.LastErrorText);
    Exit;
  end;

//  You may optionally verify the key to ensure that it is a valid
//  DSA key.
success := dsa.VerifyKey();
if (success <> 1) then
  begin
    ShowMessage(dsa.LastErrorText);
    Exit;
  end;

//  Load the hash to be signed into the DSA object:
success := dsa.SetEncodedHash('hex',hashStr);
if (success <> 1) then
  begin
    ShowMessage(dsa.LastErrorText);
    Exit;
  end;

//  Now that the DSA object contains both the private key and hash,
//  it is ready to create the signature:
success := dsa.SignHash();
if (success <> 1) then
  begin
    ShowMessage(dsa.LastErrorText);
    Exit;
  end;

//  If SignHash is successful, the DSA object contains the
//  signature.  It may be accessed as a hex or base64 encoded
//  string.  (It is also possible to access directly in byte array form via
//  the "Signature" property.)

hexSig := dsa.GetEncodedSignature('hex');
Memo1.Lines.Add('Signature:');
Memo1.Lines.Add(hexSig);

//  -----------------------------------------------------------
//  Step 2: Verify the DSA Signature
//  -----------------------------------------------------------

dsa2 := TChilkatDsa.Create(Self);

//  Load the DSA public key to be used for verification:

pemPublicKey := dsa2.LoadText('dsa_pub.pem');
success := dsa2.FromPublicPem(pemPublicKey);
if (success <> 1) then
  begin
    ShowMessage(dsa2.LastErrorText);
    Exit;
  end;

//  Load the hash to be verified against the signature.
success := dsa2.SetEncodedHash('hex',hashStr);
if (success <> 1) then
  begin
    ShowMessage(dsa2.LastErrorText);
    Exit;
  end;

//  Load the signature:
success := dsa2.SetEncodedSignature('hex',hexSig);
if (success <> 1) then
  begin
    ShowMessage(dsa2.LastErrorText);
    Exit;
  end;

//  Verify:
success := dsa2.Verify();
if (success <> 1) then
  begin
    ShowMessage(dsa2.LastErrorText);
  end
else
  begin
    Memo1.Lines.Add('DSA Signature Verified!');
  end;


end;
Ответить с цитированием