![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) RSA Encrypt Hash using SHA256 hash function and SHA1 mask functionHow can this Javascript be duplicated using Chilkat? function a(e, t) { var r = s.pki.publicKeyFromPem(e) , n = r.encrypt(t, "RSA-OAEP", { md: s.md.sha256.create(), mgf1: { md: s.md.sha1.create() } }); return s.util.encode64(n) } Note: The OAEP padding uses random bytes in the padding, and therefore each time encryption happens, even using the same data and key, the result will be different -- but still valid. One should not expect to get the same output. Note: This example requires Chilkat v11.0.0 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) 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 @pubkey int EXEC @hr = sp_OACreate 'Chilkat.PublicKey', @pubkey OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END DECLARE @sbPem int EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbPem OUT DECLARE @bCrlf int SELECT @bCrlf = 1 EXEC sp_OAMethod @sbPem, 'AppendLine', @success OUT, '-----BEGIN PUBLIC KEY-----', @bCrlf EXEC sp_OAMethod @sbPem, 'AppendLine', @success OUT, 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA33TqqLR3eeUmDtHS89qF', @bCrlf EXEC sp_OAMethod @sbPem, 'AppendLine', @success OUT, '3p4MP7Wfqt2Zjj3lZjLjjCGDvwr9cJNlNDiuKboODgUiT4ZdPWbOiMAfDcDzlOxA', @bCrlf EXEC sp_OAMethod @sbPem, 'AppendLine', @success OUT, '04DDnEFGAf+kDQiNSe2ZtqC7bnIc8+KSG/qOGQIVaay4Ucr6ovDkykO5Hxn7OU7s', @bCrlf EXEC sp_OAMethod @sbPem, 'AppendLine', @success OUT, 'Jp9TP9H0JH8zMQA6YzijYH9LsupTerrY3U6zyihVEDXXOv08vBHk50BMFJbE9iwF', @bCrlf EXEC sp_OAMethod @sbPem, 'AppendLine', @success OUT, 'wnxCsU5+UZUZYw87Uu0n4LPFS9BT8tUIvAfnRXIEWCha3KbFWmdZQZlyrFw0buUE', @bCrlf EXEC sp_OAMethod @sbPem, 'AppendLine', @success OUT, 'f0YN3/Q0auBkdbDR/ES2PbgKTJdkjc/rEeM0TxvOUf7HuUNOhrtAVEN1D5uuxE1W', @bCrlf EXEC sp_OAMethod @sbPem, 'AppendLine', @success OUT, 'SwIDAQAB', @bCrlf EXEC sp_OAMethod @sbPem, 'AppendLine', @success OUT, '-----END PUBLIC KEY-----', @bCrlf -- Load the public key object from the PEM. EXEC sp_OAMethod @sbPem, 'GetAsString', @sTmp0 OUT EXEC sp_OAMethod @pubkey, 'LoadFromString', @success OUT, @sTmp0 IF @success = 0 BEGIN EXEC sp_OAGetProperty @pubkey, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @pubkey EXEC @hr = sp_OADestroy @sbPem RETURN END DECLARE @originalData nvarchar(4000) SELECT @originalData = 'This is the original data to be SHA-256 hashed and RSA encrypted.' -- First we SHA-256 hash the original data to get the hash in base64 format: DECLARE @crypt int EXEC @hr = sp_OACreate 'Chilkat.Crypt2', @crypt OUT EXEC sp_OASetProperty @crypt, 'HashAlgorithm', 'SHA-256' EXEC sp_OASetProperty @crypt, 'EncodingMode', 'base64' DECLARE @hashBase64 nvarchar(4000) EXEC sp_OAMethod @crypt, 'HashStringENC', @hashBase64 OUT, @originalData -- Setup RSA to use OAEP padding with SHA-1 for the mask function. DECLARE @rsa int EXEC @hr = sp_OACreate 'Chilkat.Rsa', @rsa OUT EXEC sp_OASetProperty @rsa, 'PkcsPadding', 0 EXEC sp_OASetProperty @rsa, 'OaepHash', 'SHA256' EXEC sp_OAMethod @rsa, 'UsePublicKey', @success OUT, @pubkey EXEC sp_OASetProperty @rsa, 'EncodingMode', 'base64' -- We can provide a binary encoding mode, such as "base64", "hex", "base64url", etc. -- for the Charset property. The Charset property was previously limited to character encodings, such as -- "utf-8", "iso-8859-1", etc. If a binary encoding is used, then the string passed in is decoded to the binary -- bytes as indicated. (If an actual charset, such as "utf-8" is used, then the input string is converted to the -- byte representation of the charset, and then encrypted.) -- Given that a hash is composed of non-text binary bytes, we'll set the Charset property equal to "base64" -- (because we have the base64 hash from above). EXEC sp_OASetProperty @rsa, 'Charset', 'base64' -- Note: The OAEP padding uses random bytes in the padding, and therefore each time encryption happens, -- even using the same data and key, the result will be different -- but still valid. One should not expect -- to get the same output. DECLARE @bUsePrivateKey int SELECT @bUsePrivateKey = 0 DECLARE @encryptedStr nvarchar(4000) EXEC sp_OAMethod @rsa, 'EncryptStringENC', @encryptedStr OUT, @hashBase64, @bUsePrivateKey EXEC sp_OAGetProperty @rsa, 'LastMethodSuccess', @iTmp0 OUT IF @iTmp0 = 0 BEGIN EXEC sp_OAGetProperty @rsa, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @pubkey EXEC @hr = sp_OADestroy @sbPem EXEC @hr = sp_OADestroy @crypt EXEC @hr = sp_OADestroy @rsa RETURN END PRINT 'Base64 RSA encrypted output: ' + @encryptedStr EXEC @hr = sp_OADestroy @pubkey EXEC @hr = sp_OADestroy @sbPem EXEC @hr = sp_OADestroy @crypt EXEC @hr = sp_OADestroy @rsa END GO |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.