AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi LockBox3 String AES Verschlüsselung - Fehler in der Bereichsprüfung

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

Ein Thema von TUX_der_Pinguin · begonnen am 11. Jan 2017 · letzter Beitrag vom 11. Jan 2017
Antwort Antwort
TUX_der_Pinguin

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

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

  Alt 11. Jan 2017, 10: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
TUX_der_Pinguin

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

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

  Alt 11. Jan 2017, 10:57
Beholfen habe ich mir jetzt dadurch das ich in der Unit 'uTPLb_StreamUtils' von LockBox in der Funktion 'Stream_to_Base64' die Bereichsprüfung deaktiviert habe.

Delphi-Quellcode:
function Stream_to_Base64(ASource: TStream; const ATransform: TBytes = nil): TBytes;
var
  pThreeBytes: packed array[ 0..2 ] of byte;
  iBytesRead: integer;
  P, j, i: integer;
  pBase64Transform: TBytes;
begin
{$IFDEF DEBUG}
  {$RANGECHECKS OFF}
{$ENDIF}
  pBase64Transform := ATransform;
  if pBase64Transform = nil then
     pBase64Transform := AnsiBytesOf(Base64Chars);
  SetLength(Result, (ASource.Size + 2) div 3 * 4);
  ASource.Position := 0;
  P := 0;
  repeat
    iBytesRead := ASource.Read( pThreeBytes, 3);
    if iBytesRead = 0 then break;
    for j := iBytesRead to 2 do
      pThreeBytes[j] := 0;
    for j := 0 to iBytesRead do
      begin
      result[ P ] := pBase64Transform[ ( pThreeBytes[0] shr 2) + 0];
      Inc( P);
      for i := 0 to 1 do
        pThreeBytes[i] := (pThreeBytes[i] shl 6) + (pThreeBytes[i+1] shr 2);
      pThreeBytes[ 2] := pThreeBytes[ 2] shl 6
      end
  until iBytesRead < 3;
  if iBytesRead > 0 then
    for j := iBytesRead to 2 do
      begin
      result[P] := Ord('=');
      Inc( P)
      end
{$IFDEF DEBUG}
  {$RANGECHECKS ON}
{$ENDIF}
end;

Geändert von TUX_der_Pinguin (11. Jan 2017 um 11:02 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf