Chilkat HOME ASP Visual Basic VB.NET C# Visual C++ C MFC Delphi FoxPro Java Perl PHP Python Ruby SQL Server VBScript
|
RSA Encryption -- Same Key Different ResultsThe RSA encryption algorithm produces different results for each call, even when encrypting the same data with the same key. Decryption however, will produce the correct results. This example demonstrates.
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CHILKATRSALib_TLB, OleCtrls; ... procedure TForm1.Button1Click(Sender: TObject); var rsa: TChilkatRsa; success: Integer; publicKey: String; privateKey: String; plainText: String; usePrivateKey: Integer; encryptedStr1: String; encryptedStr2: String; rsa2: TChilkatRsa; decryptedStr1: String; decryptedStr2: String; begin rsa := TChilkatRsa.Create(Self); success := rsa.UnlockComponent('Anything for 30-day trial'); if (success <> 1) then begin ShowMessage('RSA component unlock failed'); end; // RSA public key in XML format: publicKey := '<RSAKeyValue><Modulus>xxyv1RDPU0MvfFIIa98HppXdcuI7zSu8uIqyGAy/VoxPvxZFX0acajznvjVRHipHbpcO6ryo2LwXUPf89qOqLb3Qd1lfD2ZnH+TQ6MZXNxfFRxTpTUd+tTR4EBYpd2t6kzq8ZRJYLdlviaMQQqUEwR54k7Op5HJYVKUcHIkP1xE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>'; privateKey := '<RSAKeyValue><Modulus>xxyv1RDPU0MvfFIIa98HppXdcuI7zSu8uIqyGAy/VoxPvxZFX0acajznvjVRHipHbpcO6ryo2LwXUPf89qOqLb3Qd1lfD2ZnH+TQ6MZXNxfFRxTpTUd+tTR4EBYpd2t6kzq8ZRJYLdlviaMQQqUEwR54k7Op5HJYVKUcHIkP1xE=</Modulus><Exponent>AQAB</Exponent><P>4cpW9fvG99Jsz8/AO7PDHTl+pPRAglksrR2kClLV2g9DEeFe/bvmCxLUgMCJ+0eGQ1zA6aA7McKr13zTQ7jKpQ==</P><Q>4cCS/kFlq/P1ExF37Fkh4pCodOEGutepLEG7Q/KljT3ZGlAY+2l8fGu4f+hrkUuGoFl7NOMaJflULoPIgQaq/Q==</Q><DP>lkjcSsvzqh3YKRXJiLNkyf3rypV8noYGU4+oEOsDxilkZfFRDafUPUiiQrRk4ui/d/SzvozU+ZDuWfaOk8PatQ==</DP><DQ>SYCD25i7W8Mwdibn3uIecEAdOQDTSh5RjIFSUYs9b8FFYJXXrHPp/jCsf6jS7RmkGa1Iui1/JAIL8KEjtS7QmQ==</DQ><InverseQ>EDAJa3TpNdPQ3GIdBpnTgFTQY5A60DcszsUW/iCYoXQdPVJ9BLBxVTe9jiLzGuNuzLkVBwQlCy0Bf84hACRV9A==</InverseQ><D>cMFdDYKkddlRNczaugOmOH8b1egpx2liSPs6GYZ2gFObAXJiPK8m+r6c2ckls7hrlUP0DZhi4cG6Tn7xANb0Ek17P7QquVhQYOmFy/YHzm+IJbcwwq7pJHhZBhtcjyXqfUZ+BADGE//GQbrSVwVltpOj5KcxG88NAprLn2MMxfE=</D></RSAKeyValue>'; rsa.ImportPublicKey(publicKey); // Encrypt a string and return the encrypted data base64-encoded: rsa.EncodingMode := 'base64'; plainText := 'RSA gives different results with each call, weird but OK'; usePrivateKey := 0; encryptedStr1 := rsa.EncryptStringENC(plainText,usePrivateKey); Memo1.Lines.Add(encryptedStr1); // Do it again. The results are different... encryptedStr2 := rsa.EncryptStringENC(plainText,usePrivateKey); Memo1.Lines.Add(encryptedStr2); // Now decrypt both strings, and the results are correct // in both cases: rsa2 := TChilkatRsa.Create(Self); rsa2.ImportPrivateKey(privateKey); rsa2.EncodingMode := 'base64'; usePrivateKey := 1; decryptedStr1 := rsa2.DecryptStringENC(encryptedStr1,usePrivateKey); Memo1.Lines.Add(decryptedStr1); decryptedStr2 := rsa2.DecryptStringENC(encryptedStr2,usePrivateKey); Memo1.Lines.Add(decryptedStr2); end; |
Need a specific example? Send a request to support@chilkatsoft.com
© 2000-2007 Chilkat Software, Inc. All Rights Reserved.