Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) JWE with Binary DataDemonstrates how to create a JWE that contains a binary payload (such as a JPG image). Note: This example requires Chilkat v9.5.0.66 or greater.
-- 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) -- This requires the Chilkat API to have been previously unlocked. -- See Global Unlock Sample for sample code. -- Note: This example requires Chilkat v9.5.0.66 or greater. DECLARE @success int -- Load a JPG file that will be the JWE payload. DECLARE @jpgBytes int -- Use "Chilkat_9_5_0.BinData" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.BinData', @jpgBytes OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END EXEC sp_OAMethod @jpgBytes, 'LoadFile', @success OUT, 'qa_data/jpg/starfish.jpg' -- Make sure your app checks the success/failure of the call to LoadFile.. EXEC sp_OAGetProperty @jpgBytes, 'NumBytes', @iTmp0 OUT PRINT 'Original JPG size = ' + @iTmp0 DECLARE @jwe int -- Use "Chilkat_9_5_0.Jwe" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Jwe', @jwe OUT DECLARE @jweProtHdr int -- Use "Chilkat_9_5_0.JsonObject" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @jweProtHdr OUT EXEC sp_OAMethod @jweProtHdr, 'AppendString', @success OUT, 'alg', 'A128KW' EXEC sp_OAMethod @jweProtHdr, 'AppendString', @success OUT, 'enc', 'A128CBC-HS256' EXEC sp_OAMethod @jwe, 'SetProtectedHeader', @success OUT, @jweProtHdr DECLARE @aesWrappingKey nvarchar(4000) SELECT @aesWrappingKey = 'GawgguFyGrWKav7AX4VKUg' EXEC sp_OAMethod @jwe, 'SetWrappingKey', @success OUT, 0, @aesWrappingKey, 'base64url' -- Encrypt and return the JWE in sbJwe: DECLARE @sbJwe int -- Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbJwe OUT EXEC sp_OAMethod @jwe, 'EncryptBd', @success OUT, @jpgBytes, @sbJwe IF @success <> 1 BEGIN EXEC sp_OAGetProperty @jwe, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @jpgBytes EXEC @hr = sp_OADestroy @jwe EXEC @hr = sp_OADestroy @jweProtHdr EXEC @hr = sp_OADestroy @sbJwe RETURN END -- Show the JWE: EXEC sp_OAMethod @sbJwe, 'GetAsString', @sTmp0 OUT PRINT @sTmp0 EXEC sp_OAGetProperty @sbJwe, 'Length', @iTmp0 OUT PRINT 'size of JWE: ' + @iTmp0 -- --------------------------------------------------------- -- Decrypt to get the original JPG file.. DECLARE @jwe2 int -- Use "Chilkat_9_5_0.Jwe" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Jwe', @jwe2 OUT EXEC sp_OAMethod @jwe2, 'LoadJweSb', @success OUT, @sbJwe IF @success <> 1 BEGIN EXEC sp_OAGetProperty @jwe2, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @jpgBytes EXEC @hr = sp_OADestroy @jwe EXEC @hr = sp_OADestroy @jweProtHdr EXEC @hr = sp_OADestroy @sbJwe EXEC @hr = sp_OADestroy @jwe2 RETURN END -- Set the AES wrap key. EXEC sp_OAMethod @jwe2, 'SetWrappingKey', @success OUT, 0, @aesWrappingKey, 'base64url' -- Decrypt. DECLARE @jpgOriginal int -- Use "Chilkat_9_5_0.BinData" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.BinData', @jpgOriginal OUT EXEC sp_OAMethod @jwe2, 'DecryptBd', @success OUT, 0, @jpgOriginal IF @success <> 1 BEGIN EXEC sp_OAGetProperty @jwe2, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @jpgBytes EXEC @hr = sp_OADestroy @jwe EXEC @hr = sp_OADestroy @jweProtHdr EXEC @hr = sp_OADestroy @sbJwe EXEC @hr = sp_OADestroy @jwe2 EXEC @hr = sp_OADestroy @jpgOriginal RETURN END EXEC sp_OAGetProperty @jpgOriginal, 'NumBytes', @iTmp0 OUT PRINT 'Decrypted JPG size = ' + @iTmp0 -- Save the decrypted JPG to a file. EXEC sp_OAMethod @jpgOriginal, 'WriteFile', @success OUT, 'qa_output/jwe_decrypted_starfish.jpg' PRINT 'success = ' + @success -- The output of this program, when tested, was: -- Original JPG size = 6229 -- eyJhbGciOiJBMTI4S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0.9YFz_wteV ... 7Et3hKhpxnKEXw -- size of JWE: 8473 -- Decrypted JPG size = 6229 -- success = True EXEC @hr = sp_OADestroy @jpgBytes EXEC @hr = sp_OADestroy @jwe EXEC @hr = sp_OADestroy @jweProtHdr EXEC @hr = sp_OADestroy @sbJwe EXEC @hr = sp_OADestroy @jwe2 EXEC @hr = sp_OADestroy @jpgOriginal END GO |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.