SQL Server
SQL Server
Encrypt MIME using RSAES-OAEP with SHA256 and AES-128 content encryption
See more MIME Examples
Demonstrates how to encrypt MIME using RSAES-OAEP with SHA256 and AES-128 content encryption.Note: This example requires Chilkat v9.5.0.67 or greater.
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
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- This requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
DECLARE @mime int
EXEC @hr = sp_OACreate 'Chilkat.Mime', @mime OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
-- Create a MIME message to encrypt.
EXEC sp_OAMethod @mime, 'NewMultipartMixed', @success OUT
EXEC sp_OAMethod @mime, 'AddHeaderField', @success OUT, 'someHeader1', 'Some value 1'
EXEC sp_OAMethod @mime, 'AddHeaderField', @success OUT, 'someHeader2', 'Some value 2'
DECLARE @part0 int
EXEC @hr = sp_OACreate 'Chilkat.Mime', @part0 OUT
EXEC sp_OAMethod @part0, 'AddHeaderField', @success OUT, 'hdrA', 'Some value A'
EXEC sp_OAMethod @part0, 'AddHeaderField', @success OUT, 'hdrB', 'Some value B'
EXEC sp_OASetProperty @part0, 'ContentType', 'text/plain'
EXEC sp_OAMethod @part0, 'SetBody', NULL, 'This is the plain-text body.'
DECLARE @part1 int
EXEC @hr = sp_OACreate 'Chilkat.Mime', @part1 OUT
EXEC sp_OAMethod @part1, 'AddHeaderField', @success OUT, 'hdrX', 'Some value X'
EXEC sp_OAMethod @part1, 'AddHeaderField', @success OUT, 'hdrY', 'Some value Y'
EXEC sp_OASetProperty @part1, 'ContentType', 'text/xml'
EXEC sp_OAMethod @part1, 'SetBody', NULL, '<a>This is the XML body</a>'
EXEC sp_OAMethod @mime, 'AppendPart', @success OUT, @part0
EXEC sp_OAMethod @mime, 'AppendPart', @success OUT, @part1
-- The MIME to be encrypted:
DECLARE @sbMime int
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbMime OUT
EXEC sp_OAMethod @mime, 'GetMimeSb', @success OUT, @sbMime
EXEC sp_OAMethod @sbMime, 'GetAsString', @sTmp0 OUT
PRINT @sTmp0
-- Content-Type: multipart/mixed; boundary="------------080303020600020604010008"
-- someHeader1: Some value 1
-- someHeader2: Some value 2
--
-- --------------080303020600020604010008
-- hdrA: Some value A
-- hdrB: Some value B
-- Content-Type: text/plain
--
-- This is the plain-text body.
-- --------------080303020600020604010008
-- hdrX: Some value X
-- hdrY: Some value Y
-- Content-Type: text/xml
--
-- <a>This is the XML body</a>
-- --------------080303020600020604010008--
--
-- Load an RSA-based certificate.
-- (Encrypting MIME only requires the public key. Decrypting MIME requires the private key.)
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 @mime
EXEC @hr = sp_OADestroy @part0
EXEC @hr = sp_OADestroy @part1
EXEC @hr = sp_OADestroy @sbMime
EXEC @hr = sp_OADestroy @cert
RETURN
END
-- Set the email object properties to indicate the desired encryption.
EXEC sp_OASetProperty @mime, 'Pkcs7CryptAlg', 'aes'
-- If AES-256 is desired, set the following property to 256.
EXEC sp_OASetProperty @mime, 'Pkcs7KeyLength', 128
EXEC sp_OASetProperty @mime, 'OaepPadding', 1
-- Other choices for the OAEP hash algorithm are "sha1", "sha384", and "sha512"
EXEC sp_OASetProperty @mime, 'OaepHash', 'sha256'
-- Encrypt the MIME (to create S/MIME, which stands for "Secure MIME")
EXEC sp_OAMethod @mime, 'Encrypt', @success OUT, @cert
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @mime, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @mime
EXEC @hr = sp_OADestroy @part0
EXEC @hr = sp_OADestroy @part1
EXEC @hr = sp_OADestroy @sbMime
EXEC @hr = sp_OADestroy @cert
RETURN
END
PRINT '---------------'
PRINT 'Encrypted MIME:'
PRINT '---------------'
EXEC sp_OAMethod @mime, 'GetMime', @sTmp0 OUT
PRINT @sTmp0
PRINT 'Success.'
-- ---------------------------------------------------
-- This is sample output for RSAES-OAEP encrypted MIME:
-- ---------------------------------------------------
-- Content-Type: application/x-pkcs7-mime; name="smime.p7m"; smime-type="enveloped-data"
-- someHeader1: Some value 1
-- someHeader2: Some value 2
-- Content-Disposition: attachment; filename="smime.p7m"
-- Content-Transfer-Encoding: base64
--
-- MIIDvAYJKoZIhvcNAQcDoIIDrTCCA6kCAQAxggGgMIIBnAIBADB1MGgxCzAJBgNVBAYTAlVTMQsw
-- CQYDVQQIDAJJTDEQMA4GA1UEBwwHV2hlYXRvbjEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQ
-- dHkgTHRkMRcwFQYDVQQDDA5DaGlsa2F0V2lkZ2V0cwIJAMRwugDmvniwMBwGCSqGSIb3DQEBBzAP
-- oA0wCwYJYIZIAWUDBAIBBIIBAFaUL1ga1bOrdqYKcMm+FHUacBvzfBxk0fnPA0AMBdN8BvTWT3CN
-- YuqBhjOGyq0FpYD9pVZybUuFMCVsVyIW2O62HnsOK58YaPEUUcdH2sI+yjqX9UAn0P0nVDSsVdeK
-- W8x9kMfZg+3UP+y1q+lu7VRJO3f2C9oLQpTkc4VW4n7UOcUI0waykLCjCTL8lFDb7/J3GeuMKyhH
-- 5riNz50kpbzqn7m2Ks9yA+QmcTdXclclGFr2vwEUFzSdT2pxh/vaUrogCxkYWbQ2eV7vZg6O4kV0
-- aqHBqySkPTAzHKiHH8K8GVdlTuJ8350CpICa4T8w7/Ht5I7dyOPPKy4C+rVtrvcwggH+BgkqhkiG
-- 9w0BBwEwHQYJYIZIAWUDBAECBBDTC2WNBN+z2I47/4Feu9YqgIIB0MZvl3nC/q/Wzil6HtfQTr12
-- Q5moHY+ORzAa1P9XvX2ZUFhW530mV395mQw/A4o4ekmX9eRPEZquYzZPLT8hNeZIuNdhpcSQUmad
-- rKnKkR0wKJ3jJ3LhOIohVBQSYs8kVDZKq6lJBIznlsurFelZoNEhyRschhteDZx5rb7fCe8c2+/O
-- DHxaqaHCAzm/Bd7kcg6FFfuTZy3tu0PgP5IsXN4OFA3kkvwjAs4XsVS8jdIcmDNBkYieE8WmJOIm
-- Mz7mh/CHWLgWfGKa0Dkb9RcbFgLwYNT3GzuXFw9XPbKkEZjEAtJajWbN6P0WQl96YYd9qZxUpGxZ
-- zjTHEYzViUdUXolfpLufttrRXyxN1RFWhNFMFbv66xYqklMSgpdM/Mbk+EuvX6eXayDPvDBpfYMw
-- NoRAzv1Ony2c0ez9rBemJICicxAzpuvHbRxdjYs63Dnv+TYgpBK12AxWWpPIjXvw0WQKgTC3Tg8s
-- EnuGhpENqso/clJBEBSn4+2WhYtYbdI5sVme67lvqQl1Xxy3r18SWaQbyDOwgYi1E+54lMDOxMy0
-- y0FPHk5pP45DnXWj+XORPp5LhuZr5mf62YOXSSUwR5P0cXy4Rc+pN5lhRQPCf5z2
EXEC @hr = sp_OADestroy @mime
EXEC @hr = sp_OADestroy @part0
EXEC @hr = sp_OADestroy @part1
EXEC @hr = sp_OADestroy @sbMime
EXEC @hr = sp_OADestroy @cert
END
GO