SQL Server
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
-- 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