Einzelnen Beitrag anzeigen

TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
571 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

LockBox3 String AES Verschlüsselung - Fehler in der Bereichsprüfung

  Alt 11. Jan 2017, 11:18
Hallo,

wenn ich eine Anwendung mit eingeschalteter Bereichsprüfung kompiliere (Debug) erhalte ich immer die Meldung "Fehler bei der Bereichsprüfung" beim Versuch einen Text zu ver- oder entschlüsseln. Kompiliere ich die Anwendung ohne Bereichsprüfung (Release) dann funktioniert alles einwandfrei und ich kann einen Text verschlüsseln und auch wieder entschlüsseln und erhalte den richtigen Text.

Bei der Komponente handelt es sich um die über Getit verfügbare Komponente LockBox 3.5.1 und als Entwicklungsumgebung wird Delphi 10.1 Berlin Update 2 eingesetzt.

Ich haben mir eine Unit gebaut in der ich Funktionen zum ver- und entschlüsseln bereitstelle, in der Anwendung wird nur die entsprechende Funktion aufgerufen mit dem entsprechenden zu ver- oder entschlüsselnden Text sowie dem Passwort. Stutzig hat mich auch gemacht das die Passwort Länge ebenfalls zu einem Fehler führen kann, "Intergerüberlauf" wenn das Passwort länger oder kürzer als 16 Zeichen ist. Das aber lässt sich ja umgehen indem man einfach ein 16-Stelliges Passwort angibt. Aber der erste Fehler ist sehr frustrierend den zum Testen würde ich gerne die Anwendung im Debug Modus mit eingeschalteter Bereichsprüfung kompilieren.

Hat jemand von diesem Problem schon gehört und eine Idee für einen Workaround oder gar einen Fix?

Delphi-Quellcode:
unit uHandlingCrypt;

interface

function EncryptString(Str, PassPhrase: String): String;
function DecryptString(Str, PassPhrase: String): String;

implementation

uses
  uTPLb_CryptographicLibrary,
  uTPLb_Codec,
  System.SysUtils;

function EncryptString(Str, Passphrase: String): String;
var
  CryptLib: TCryptographicLibrary;
  Codec: TCodec;

begin
  //init
  result := EmptyStr;

  CryptLib := TCryptographicLibrary.Create(nil);
  try
    Codec := TCodec.Create(nil);
    try
      Codec.CryptoLibrary := CryptLib;
      Codec.StreamCipherId := 'native.StreamToBlock';
      Codec.BlockCipherId := 'native.AES-256';
      Codec.ChainModeId := 'native.ECB';
      Codec.Password := PassPhrase;
      Codec.EncryptString(Str, result, TEncoding.UTF8); //<--hier wird der Fehler in der Bereichsprüfung ausgelöst
    finally
      Codec.Free;
    end;{try..finally}
  finally
    CryptLib.Free;
  end;{try..finally}

end;

function DecryptString(Str, PassPhrase: String): String;
var
  CryptLib: TCryptographicLibrary;
  Codec: TCodec;

begin
  //init
  result := EmptyStr;

  CryptLib := TCryptographicLibrary.Create(nil);
  try
    Codec := TCodec.Create(nil);
    try
      Codec.CryptoLibrary := CryptLib;
      Codec.StreamCipherId := 'native.StreamToBlock';
      Codec.BlockCipherId := 'native.AES-256';
      Codec.ChainModeId := 'native.ECB';
      Codec.Password := PassPhrase;
      Codec.DecryptString(result, Str, TEncoding.UTF8); //<--hier wird der Fehler in der Bereichsprüfung ausgelöst
    finally
      Codec.Free;
    end;{try..finally}
  finally
    CryptLib.Free;
  end;{try..finally}

end;

end.
  Mit Zitat antworten Zitat