Delphi / Pascal Encryption

Delphi / Pascal Encryption

Delphi and Object Pascal still power a lot of Windows desktop software, line-of-business tools, and older codebases that predate .NET. You get fast native executables, visual designers, and a familiar component model. Free Pascal and Lazarus carry the same syntax across platforms if you are not on Embarcadero’s stack.

Those EXEs are trivial to open in a resource editor or a strings utility; serial checks, licence server URLs, and SQL connection hints were never meant to stay secret in source. StringEncrypt emits WideChar or Char code that decrypts at runtime so your literals are not sitting in cleartext next to the form definitions. Pair it with real software licensing if you need more than casual hiding.

String encryption supports both UNICODE (WideChar type) and ANSI (Char type) strings.

You can read more about Delphi / Pascal strings at:

Delphi encryption (UNICODE Example)

Plaintext reference: StringEncrypt sample

// encrypted with https://www.stringencrypt.com (v1.5.0) [Delphi / Pascal]
var
  // myString = "StringEncrypt sample"
  myString: array[0..21] of WideChar;
  vYaUo: Integer;
  eoudq: Integer;
  YZzTs: Integer;
  BSXrt: Integer;
  lIqhp: Integer;
  GTmFS: Integer;
  JstRO: Integer;
  ivxoA: Integer;
  bXRUW: Integer;
  tGQDP: Integer;
  glrzJ: Integer;
  UnAMy: Integer;
  vmMle: Integer;
  mWUGv: Integer;
  itSyI: Integer;
  ZJOKy: Integer;
  uFedA: Integer;

begin

  myString[20] := WideChar($98FC); myString[6] := WideChar($1696);
  myString[12] := WideChar($722E); myString[1] := WideChar($CC22);
  myString[7] := WideChar($C040); myString[10] := WideChar($3727);
  myString[4] := WideChar($FBAF); myString[8] := WideChar($6510);
  myString[14] := WideChar($D944); myString[18] := WideChar($7DB7);
  myString[13] := WideChar($7F7E); myString[2] := WideChar($714F);
  myString[19] := WideChar($CAE1); myString[16] := WideChar($0F52);
  myString[11] := WideChar($EC88); myString[0] := WideChar($1F0A);
  myString[3] := WideChar($D7FC); myString[9] := WideChar($295A);
  myString[17] := WideChar($A42A); myString[15] := WideChar($B2BD);
  myString[5] := WideChar($61B2);

  for uFedA := 0 to 21 do
  begin
    vYaUo := Ord(myString[uFedA]);
    for eoudq := 0 to 3 do
    begin
      for YZzTs := 0 to 1 do
      begin
        vYaUo := (vYaUo xor ((vYaUo and $FFFF) shr 12)) and $FFFF;
        vYaUo := (((vYaUo and $FFFF) shr (uFedA mod 16)) or ((vYaUo and $FFFF) shl (16 - (uFedA mod 16)))) and $FFFF;
      end;
      vYaUo := ((vYaUo and $FFFF) - uFedA) and $FFFF;
      for BSXrt := 0 to 2 do
      begin
        vYaUo := (((vYaUo and $FFFF) xor $FFFF) + 1) and $FFFF;
        vYaUo := ((vYaUo and $FFFF) - 1) and $FFFF;
        vYaUo := (((vYaUo and $FFFF) xor $FFFF) + 1) and $FFFF;
      end;
    end;
    for lIqhp := 0 to 3 do
    begin
      for GTmFS := 0 to 2 do
      begin
        vYaUo := (vYaUo xor (((vYaUo and $FFFF) shl 11) and $FFFF)) and $FFFF;
        vYaUo := (((vYaUo and $FFFF) shl (uFedA mod 16)) or ((vYaUo and $FFFF) shr (16 - (uFedA mod 16)))) and $FFFF;
        for JstRO := 0 to 1 do
        begin
          vYaUo := (vYaUo xor ((vYaUo and $FFFF) shr 14)) and $FFFF;
          vYaUo := ((vYaUo and $FFFF) - 1) and $FFFF;
        end;
      end;
      for ivxoA := 0 to 1 do
      begin
        for bXRUW := 0 to 3 do
        begin
          vYaUo := (((vYaUo and $FFFF) xor $FFFF) + 1) and $FFFF;
          vYaUo := (vYaUo xor (((vYaUo and $FFFF) shl 11) and $FFFF)) and $FFFF;
          vYaUo := ((vYaUo and $FFFF) - $B75E) and $FFFF;
        end;
        for tGQDP := 0 to 3 do
        begin
          vYaUo := ((vYaUo and $FFFF) + uFedA) and $FFFF;
        end;
      end;
    end;
    vYaUo := (((vYaUo and $FFFF) shr (uFedA mod 16)) or ((vYaUo and $FFFF) shl (16 - (uFedA mod 16)))) and $FFFF;
    vYaUo := ((vYaUo and $FFFF) + $30C0) and $FFFF;
    vYaUo := (vYaUo xor (((vYaUo and $FFFF) shl 8) and $FFFF)) and $FFFF;
    for glrzJ := 0 to 2 do
    begin
      for UnAMy := 0 to 2 do
      begin
        for vmMle := 0 to 1 do
        begin
          vYaUo := ((vYaUo and $FFFF) - $7285) and $FFFF;
          vYaUo := (vYaUo xor (((vYaUo and $FFFF) shl 10) and $FFFF)) and $FFFF;
          vYaUo := ((vYaUo and $FFFF) - $5A41) and $FFFF;
        end;
      end;
    end;
    vYaUo := ((vYaUo and $FFFF) + uFedA) and $FFFF;
    for mWUGv := 0 to 3 do
    begin
      for itSyI := 0 to 1 do
      begin
        for ZJOKy := 0 to 1 do
        begin
          vYaUo := (vYaUo xor uFedA) and $FFFF;
          vYaUo := (vYaUo xor $FFFF) and $FFFF;
          vYaUo := (((vYaUo and $FFFF) shl (uFedA mod 16)) or ((vYaUo and $FFFF) shr (16 - (uFedA mod 16)))) and $FFFF;
        end;
      end;
    end;
    vYaUo := ((vYaUo and $FFFF) - $0783) and $FFFF;
    myString[uFedA] := WideChar(vYaUo);
  end;

Pascal encryption (ANSI Example)

Plaintext reference: StringEncrypt sample

// encrypted with https://www.stringencrypt.com (v1.5.0) [Delphi / Pascal]
var
  // myString = "StringEncrypt sample"
  myString: array[0..21] of Char;
  HnyOo: Integer;
  wpnVg: Integer;
  gEATm: Integer;
  necgH: Integer;
  KCjnD: Integer;
  WaSxM: Integer;
  iphLl: Integer;
  hkfPW: Integer;
  juWsC: Integer;
  hvSFt: Integer;
  IOXrM: Integer;

begin

  myString[10] := Char($62); myString[0] := Char($A8);
  myString[15] := Char($4D); myString[18] := Char($69);
  myString[7] := Char($45); myString[13] := Char($B6);
  myString[2] := Char($2C); myString[16] := Char($D0);
  myString[14] := Char($60); myString[3] := Char($A2);
  myString[17] := Char($34); myString[8] := Char($DF);
  myString[1] := Char($BB); myString[5] := Char($48);
  myString[19] := Char($F1); myString[12] := Char($9F);
  myString[6] := Char($35); myString[4] := Char($AE);
  myString[9] := Char($A9); myString[11] := Char($FC);
  myString[20] := Char($4D);

  for IOXrM := 0 to 21 do
  begin
    HnyOo := Ord(myString[IOXrM]);
    for wpnVg := 0 to 3 do
    begin
      HnyOo := ((HnyOo and $FF) - 1) and $FF;
    end;
    for gEATm := 0 to 2 do
    begin
      HnyOo := (HnyOo xor (((HnyOo and $FF) shl 7) and $FF)) and $FF;
      HnyOo := (HnyOo xor $7E) and $FF;
      HnyOo := (((HnyOo and $FF) xor $FF) + 1) and $FF;
    end;
    HnyOo := (HnyOo xor ((HnyOo and $FF) shr 6)) and $FF;
    for necgH := 0 to 1 do
    begin
      for KCjnD := 0 to 2 do
      begin
        HnyOo := ((HnyOo and $FF) - $F2) and $FF;
        for WaSxM := 0 to 2 do
        begin
          HnyOo := ((HnyOo and $FF) - IOXrM) and $FF;
          HnyOo := (((HnyOo and $FF) xor $FF) + 1) and $FF;
        end;
        for iphLl := 0 to 3 do
        begin
          HnyOo := (HnyOo xor IOXrM) and $FF;
          HnyOo := ((HnyOo and $FF) + $4E) and $FF;
          HnyOo := (((HnyOo and $FF) shr (IOXrM mod 8)) or ((HnyOo and $FF) shl (8 - (IOXrM mod 8)))) and $FF;
        end;
      end;
    end;
    HnyOo := (((HnyOo and $FF) xor $FF) + 1) and $FF;
    HnyOo := ((HnyOo and $FF) - IOXrM) and $FF;
    for hkfPW := 0 to 2 do
    begin
      HnyOo := (HnyOo xor IOXrM) and $FF;
      HnyOo := ((HnyOo and $FF) - 1) and $FF;
      for juWsC := 0 to 3 do
      begin
        HnyOo := (HnyOo xor ((HnyOo and $FF) shr 6)) and $FF;
        HnyOo := (HnyOo xor (((HnyOo and $FF) shl 6) and $FF)) and $FF;
        for hvSFt := 0 to 1 do
        begin
          HnyOo := ((HnyOo and $FF) + IOXrM) and $FF;
        end;
      end;
    end;
    HnyOo := (HnyOo xor ((HnyOo and $FF) shr 7)) and $FF;
    HnyOo := ((HnyOo and $FF) - IOXrM) and $FF;
    HnyOo := (HnyOo xor (((HnyOo and $FF) shl 7) and $FF)) and $FF;
    HnyOo := (HnyOo xor IOXrM) and $FF;
    myString[IOXrM] := Char(HnyOo);
  end;