Delphi ActiveX
Delphi ActiveX
JWE with Binary Data
See more JSON Web Encryption (JWE) Examples
Demonstrates 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.
Chilkat Delphi ActiveX Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
jpgBytes: TChilkatBinData;
jwe: TChilkatJwe;
jweProtHdr: TChilkatJsonObject;
aesWrappingKey: WideString;
sbJwe: TChilkatStringBuilder;
jwe2: TChilkatJwe;
jpgOriginal: TChilkatBinData;
begin
success := 0;
// 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.
// Load a JPG file that will be the JWE payload.
jpgBytes := TChilkatBinData.Create(Self);
success := jpgBytes.LoadFile('qa_data/jpg/starfish.jpg');
// Make sure your app checks the success/failure of the call to LoadFile..
Memo1.Lines.Add('Original JPG size = ' + IntToStr(jpgBytes.NumBytes));
jwe := TChilkatJwe.Create(Self);
jweProtHdr := TChilkatJsonObject.Create(Self);
jweProtHdr.AppendString('alg','A128KW');
jweProtHdr.AppendString('enc','A128CBC-HS256');
jwe.SetProtectedHeader(jweProtHdr.ControlInterface);
aesWrappingKey := 'GawgguFyGrWKav7AX4VKUg';
jwe.SetWrappingKey(0,aesWrappingKey,'base64url');
// Encrypt and return the JWE in sbJwe:
sbJwe := TChilkatStringBuilder.Create(Self);
success := jwe.EncryptBd(jpgBytes.ControlInterface,sbJwe.ControlInterface);
if (success <> 1) then
begin
Memo1.Lines.Add(jwe.LastErrorText);
Exit;
end;
// Show the JWE:
Memo1.Lines.Add(sbJwe.GetAsString());
Memo1.Lines.Add('size of JWE: ' + IntToStr(sbJwe.Length));
// ---------------------------------------------------------
// Decrypt to get the original JPG file..
jwe2 := TChilkatJwe.Create(Self);
success := jwe2.LoadJweSb(sbJwe.ControlInterface);
if (success <> 1) then
begin
Memo1.Lines.Add(jwe2.LastErrorText);
Exit;
end;
// Set the AES wrap key.
jwe2.SetWrappingKey(0,aesWrappingKey,'base64url');
// Decrypt.
jpgOriginal := TChilkatBinData.Create(Self);
success := jwe2.DecryptBd(0,jpgOriginal.ControlInterface);
if (success <> 1) then
begin
Memo1.Lines.Add(jwe2.LastErrorText);
Exit;
end;
Memo1.Lines.Add('Decrypted JPG size = ' + IntToStr(jpgOriginal.NumBytes));
// Save the decrypted JPG to a file.
success := jpgOriginal.WriteFile('qa_output/jwe_decrypted_starfish.jpg');
Memo1.Lines.Add('success = ' + IntToStr(Ord(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
end;