Sample code for 30+ languages & platforms
SQL Server

Encrypt with Chilkat, Decrypt with OpenSSL

See more OpenSSL Examples

Demonstrates how to RSA encrypt a string using Chilkat, and then shows the corresponding OpenSSL command to RSA decrypt. The OpenSSL command to decrypt is as follows:
openssl rsautl -decrypt -inkey VP_Private.pem -in rsa_encrypted.bin -out original.txt

Chilkat SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    DECLARE @iTmp0 int
    -- Important: Do not use nvarchar(max).  See the warning about using nvarchar(max).
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

    -- This example requires the Chilkat API to have been previously unlocked.
    -- See Global Unlock Sample for sample code.

    DECLARE @rsa int
    EXEC @hr = sp_OACreate 'Chilkat.Rsa', @rsa OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    -- Note: RSA encryption uses the public key.  
    -- RSA decryption uses the private key.
    -- The reason is that the public key can be freely provided to anybody.  This allows anybody
    -- to send an encrypted message to the private key owner, and only the private key owner 
    -- can decrypt.
    DECLARE @key int
    EXEC @hr = sp_OACreate 'Chilkat.PublicKey', @key OUT

    -- Load an RSA public key from a PEM file:
    EXEC sp_OAMethod @key, 'LoadFromFile', @success OUT, 'qa_data/pem/VP_Public.pem'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @key, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @rsa
        EXEC @hr = sp_OADestroy @key
        RETURN
      END

    -- Load the public key into the RSA object.
    EXEC sp_OAMethod @rsa, 'UsePublicKey', @success OUT, @key
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @rsa, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @rsa
        EXEC @hr = sp_OADestroy @key
        RETURN
      END

    DECLARE @strToEncrypt nvarchar(4000)
    SELECT @strToEncrypt = '00000000;XYZ2-3BHQ-ABCD-MMVV;6MY1-GHJK-9LRR;0'

    -- The LittleEndian property is 0 by default, but it is set here
    -- anyway to show that LittleEndian byte ordering is required for OpenSSL compatibility.
    EXEC sp_OASetProperty @rsa, 'LittleEndian', 0

    DECLARE @usePrivateKey int
    SELECT @usePrivateKey = 0

    EXEC sp_OAMethod @rsa, 'EncryptString', @encryptedBytes OUT, @strToEncrypt, @usePrivateKey
    EXEC sp_OAGetProperty @rsa, 'LastMethodSuccess', @iTmp0 OUT
    IF @iTmp0 = 0
      BEGIN
        EXEC sp_OAGetProperty @rsa, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @rsa
        EXEC @hr = sp_OADestroy @key
        RETURN
      END

    -- The OpenSSL command to decrypt would be this:
    -- openssl rsautl -decrypt -inkey VP_Private.pem -in rsa_encrypted.bin -out original.txt

    DECLARE @fac int
    EXEC @hr = sp_OACreate 'Chilkat.FileAccess', @fac OUT

    EXEC sp_OAMethod @fac, 'WriteEntireFile', @success OUT, 'qa_output/rsa_encrypted.bin', @encryptedBytes
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @fac, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @rsa
        EXEC @hr = sp_OADestroy @key
        EXEC @hr = sp_OADestroy @fac
        RETURN
      END


    PRINT 'RSA Encryption Succeeded.'

    EXEC @hr = sp_OADestroy @rsa
    EXEC @hr = sp_OADestroy @key
    EXEC @hr = sp_OADestroy @fac


END
GO