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.
#include <CkRsa.h> #include <CkString.h> void ChilkatSample(void) { CkRsa rsa; bool success; success = rsa.UnlockComponent("Anything for 30-day trial"); if (success != true) { printf("RSA component unlock failed\n"); return; } // RSA public key in XML format: CkString publicKey; publicKey = "<RSAKeyValue><Modulus>xxyv1RDPU0MvfFIIa98HppXdcuI7zSu8uIqyGAy/VoxPvxZFX0acajznvjVRHipHbpcO6ryo2LwXUPf89qOqLb3Qd1lfD2ZnH+TQ6MZXNxfFRxTpTUd+tTR4EBYpd2t6kzq8ZRJYLdlviaMQQqUEwR54k7Op5HJYVKUcHIkP1xE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"; CkString privateKey; 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.put_EncodingMode("base64"); CkString plainText; plainText = "RSA gives different results with each call, weird but OK"; bool usePrivateKey; usePrivateKey = false; CkString encryptedStr1; encryptedStr1 = rsa.encryptStringENC(plainText,usePrivateKey); printf("%s\n",(const char *)encryptedStr1); // Do it again. The results are different... CkString encryptedStr2; encryptedStr2 = rsa.encryptStringENC(plainText,usePrivateKey); printf("%s\n",(const char *)encryptedStr2); // Now decrypt both strings, and the results are correct // in both cases: CkRsa rsa2; rsa2.ImportPrivateKey(privateKey); rsa2.put_EncodingMode("base64"); usePrivateKey = true; CkString decryptedStr1; decryptedStr1 = rsa2.decryptStringENC(encryptedStr1,usePrivateKey); printf("%s\n",(const char *)decryptedStr1); CkString decryptedStr2; decryptedStr2 = rsa2.decryptStringENC(encryptedStr2,usePrivateKey); printf("%s\n",(const char *)decryptedStr2); } |
Need a specific example? Send a request to support@chilkatsoft.com
© 2000-2008 Chilkat Software, Inc. All Rights Reserved.