Sample code for 30+ languages & platforms
SQL Server

RSAES-OAEP Encrypt String with AES-128 Content Encryption and SHA256

See more Encryption Examples

Encrypts a string using RSAES-OAEP with SHA256 and AES-128 content encryption to produce PKCS7 output (base64 encoded).

Note: This example requires Chilkat v9.5.0.67 or greater.

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.

    -- First build a string to be encrypted
    DECLARE @sb int
    EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sb OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    DECLARE @i int
    SELECT @i = 1
    WHILE @i < 25
      BEGIN
        EXEC sp_OAMethod @sb, 'AppendInt', @success OUT, @i
        EXEC sp_OAMethod @sb, 'Append', @success OUT, ' the quick brown fox jumped over the lazy dog.' + CHAR(13) + CHAR(10)
        SELECT @i = @i + 1
      END

    EXEC sp_OAMethod @sb, 'GetAsString', @sTmp0 OUT
    PRINT @sTmp0

    -- The string to be encrypted looks like this:

    -- 1 the quick brown fox jumped over the lazy dog.
    -- 2 the quick brown fox jumped over the lazy dog.
    -- 3 the quick brown fox jumped over the lazy dog.
    -- 4 the quick brown fox jumped over the lazy dog.
    -- 5 the quick brown fox jumped over the lazy dog.
    -- 6 the quick brown fox jumped over the lazy dog.
    -- ...

    -- Load a digital certificate. 
    -- We don't need the private key for encryption.
    -- Only the public key is needed (which is included in a certificate).
    DECLARE @cert int
    EXEC @hr = sp_OACreate 'Chilkat.Cert', @cert OUT

    EXEC sp_OAMethod @cert, 'LoadFromFile', @success OUT, 'qa_data/rsaes-oaep/cert.pem'
    IF @success <> 1
      BEGIN
        EXEC sp_OAGetProperty @cert, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @sb
        EXEC @hr = sp_OADestroy @cert
        RETURN
      END

    DECLARE @crypt int
    EXEC @hr = sp_OACreate 'Chilkat.Crypt2', @crypt OUT

    -- Tell the crypt object to use the certificate.
    EXEC sp_OAMethod @crypt, 'SetEncryptCert', @success OUT, @cert

    -- Indicate that we want PKI encryption (i.e. public-key infrastructure)
    -- to produce a CMS message (Cryptographic Message Syntax/PKCS7),
    -- that is be created with RSAES-OAEP padding, SHA256, and AES-128 for the
    -- bulk encryption.
    EXEC sp_OASetProperty @crypt, 'CryptAlgorithm', 'pki'
    EXEC sp_OASetProperty @crypt, 'Pkcs7CryptAlg', 'aes'
    EXEC sp_OASetProperty @crypt, 'KeyLength', 128
    EXEC sp_OASetProperty @crypt, 'OaepHash', 'sha256'
    EXEC sp_OASetProperty @crypt, 'OaepPadding', 1

    -- Also, don't forget to be specific about the character encoding (byte representation) of the
    -- string to be encrypted.
    EXEC sp_OASetProperty @crypt, 'Charset', 'utf-8'

    -- Now indicate that the PKCS7 output is to be returned in the base64 encoding.
    EXEC sp_OASetProperty @crypt, 'EncodingMode', 'base64'

    DECLARE @base64Pkcs7 nvarchar(4000)
    EXEC sp_OAMethod @sb, 'GetAsString', @sTmp0 OUT
    EXEC sp_OAMethod @crypt, 'EncryptStringENC', @base64Pkcs7 OUT, @sTmp0
    EXEC sp_OAGetProperty @crypt, 'LastMethodSuccess', @iTmp0 OUT
    IF @iTmp0 <> 1
      BEGIN
        EXEC sp_OAGetProperty @crypt, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @sb
        EXEC @hr = sp_OADestroy @cert
        EXEC @hr = sp_OADestroy @crypt
        RETURN
      END

    -- Show the output

    PRINT @base64Pkcs7

    -- This base64 can be copy-and-pasted into the form at http://lapo.it/asn1js/
    -- to verify that all the chosen algorithms were indeed used.


    PRINT 'OK.'

    EXEC @hr = sp_OADestroy @sb
    EXEC @hr = sp_OADestroy @cert
    EXEC @hr = sp_OADestroy @crypt


END
GO