![]() |
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
(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-2025 Chilkat Software, Inc. All Rights Reserved.