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
(PureBasic) RSA Encrypt Hash using SHA256 hash function and SHA1 mask functionNote: This example requires a feature introduced in Chilkat v9.5.0.66 How 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.
IncludeFile "CkStringBuilder.pb" IncludeFile "CkRsa.pb" IncludeFile "CkPublicKey.pb" IncludeFile "CkCrypt2.pb" Procedure ChilkatExample() ; Note: This example requires a feature introduced in Chilkat v9.5.0.66 ; This example requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. pubkey.i = CkPublicKey::ckCreate() If pubkey.i = 0 Debug "Failed to create object." ProcedureReturn EndIf sbPem.i = CkStringBuilder::ckCreate() If sbPem.i = 0 Debug "Failed to create object." ProcedureReturn EndIf bCrlf.i = 1 CkStringBuilder::ckAppendLine(sbPem,"-----BEGIN PUBLIC KEY-----",bCrlf) CkStringBuilder::ckAppendLine(sbPem,"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA33TqqLR3eeUmDtHS89qF",bCrlf) CkStringBuilder::ckAppendLine(sbPem,"3p4MP7Wfqt2Zjj3lZjLjjCGDvwr9cJNlNDiuKboODgUiT4ZdPWbOiMAfDcDzlOxA",bCrlf) CkStringBuilder::ckAppendLine(sbPem,"04DDnEFGAf+kDQiNSe2ZtqC7bnIc8+KSG/qOGQIVaay4Ucr6ovDkykO5Hxn7OU7s",bCrlf) CkStringBuilder::ckAppendLine(sbPem,"Jp9TP9H0JH8zMQA6YzijYH9LsupTerrY3U6zyihVEDXXOv08vBHk50BMFJbE9iwF",bCrlf) CkStringBuilder::ckAppendLine(sbPem,"wnxCsU5+UZUZYw87Uu0n4LPFS9BT8tUIvAfnRXIEWCha3KbFWmdZQZlyrFw0buUE",bCrlf) CkStringBuilder::ckAppendLine(sbPem,"f0YN3/Q0auBkdbDR/ES2PbgKTJdkjc/rEeM0TxvOUf7HuUNOhrtAVEN1D5uuxE1W",bCrlf) CkStringBuilder::ckAppendLine(sbPem,"SwIDAQAB",bCrlf) CkStringBuilder::ckAppendLine(sbPem,"-----END PUBLIC KEY-----",bCrlf) ; Load the public key object from the PEM. success.i = CkPublicKey::ckLoadFromString(pubkey,CkStringBuilder::ckGetAsString(sbPem)) If success <> 1 Debug CkPublicKey::ckLastErrorText(pubkey) CkPublicKey::ckDispose(pubkey) CkStringBuilder::ckDispose(sbPem) ProcedureReturn EndIf originalData.s = "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: crypt.i = CkCrypt2::ckCreate() If crypt.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkCrypt2::setCkHashAlgorithm(crypt, "SHA-256") CkCrypt2::setCkEncodingMode(crypt, "base64") hashBase64.s = CkCrypt2::ckHashStringENC(crypt,originalData) ; Setup RSA to use OAEP padding with SHA-1 for the mask function. rsa.i = CkRsa::ckCreate() If rsa.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkRsa::setCkOaepPadding(rsa, 1) CkRsa::setCkOaepHash(rsa, "SHA1") CkRsa::ckImportPublicKeyObj(rsa,pubkey) CkRsa::setCkEncodingMode(rsa, "base64") ; Starting in v9.5.0.66, 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). CkRsa::setCkCharset(rsa, "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. bUsePrivateKey.i = 0 encryptedStr.s = CkRsa::ckEncryptStringENC(rsa,hashBase64,bUsePrivateKey) If CkRsa::ckLastMethodSuccess(rsa) <> 1 Debug CkRsa::ckLastErrorText(rsa) CkPublicKey::ckDispose(pubkey) CkStringBuilder::ckDispose(sbPem) CkCrypt2::ckDispose(crypt) CkRsa::ckDispose(rsa) ProcedureReturn EndIf Debug "Base64 RSA encrypted output: " + encryptedStr CkPublicKey::ckDispose(pubkey) CkStringBuilder::ckDispose(sbPem) CkCrypt2::ckDispose(crypt) CkRsa::ckDispose(rsa) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.