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
(Perl) JWE using A256GCMKWThis example demonstrates creating a JCE with AES GCM key wrap.
use chilkat(); # This requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. $plaintext = "My text to enrypt"; $jwe = chilkat::CkJwe->new(); # First build the JWE Protected Header: # { # "alg": "A256GCMKW", # "kid": "18ec08e1-bfa9-4d95-b205-2b4dd1d4321d", # "tag": "kfPduVQ3T3H6vnewt--ksw", # "iv": "KkYT0GX_2jHlfqN_", # "enc": "A128CBC-HS256" # } $jweProtHdr = chilkat::CkJsonObject->new(); $jweProtHdr->AppendString("alg","A256GCMKW"); # kid is optional $jweProtHdr->AppendString("kid","18ec08e1-bfa9-4d95-b205-2b4dd1d4321d"); # tag is optional $jweProtHdr->AppendString("tag","kfPduVQ3T3H6vnewt--ksw"); $jweProtHdr->AppendString("enc","A256GCM"); # the iv should be 16 random chars. $prng = chilkat::CkPrng->new(); $jweProtHdr->AppendString("iv",$prng->randomString(16,1,1,1)); $jwe->SetProtectedHeader($jweProtHdr); print "JWE Protected Header: " . $jweProtHdr->emit() . "\r\n"; print "--" . "\r\n"; # Given that we have 256-bit AES, our key should be 32 bytes. # The ascii string here is 32 bytes, therefore the 2nd arg is "ascii" to use these # ascii chars directly as the key. $aesWrappingKey = "2baf4f730f5e4542b428593ef9cceb0e"; $jwe->SetWrappingKey(0,$aesWrappingKey,"ascii"); # Encrypt and return the JWE: $strJwe = $jwe->encrypt($plaintext,"utf-8"); if ($jwe->get_LastMethodSuccess() != 1) { print $jwe->lastErrorText() . "\r\n"; exit; } # Show the JWE we just created: print $strJwe . "\r\n"; # Decrypt the JWE that was just produced. # 1) Load the JWE. # 2) Set the AES wrapping key. # 3) Decrypt. $jwe2 = chilkat::CkJwe->new(); $success = $jwe2->LoadJwe($strJwe); if ($success != 1) { print $jwe2->lastErrorText() . "\r\n"; exit; } # Set the AES wrap key. Important to use "ascii" $jwe2->SetWrappingKey(0,$aesWrappingKey,"ascii"); # Decrypt. $originalPlaintext = $jwe2->decrypt(0,"utf-8"); if ($jwe2->get_LastMethodSuccess() != 1) { print $jwe2->lastErrorText() . "\r\n"; exit; } print "original text: " . "\r\n"; print $originalPlaintext . "\r\n"; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.