![]() |
LockBox3 String AES Verschlüsselung - Fehler in der Bereichsprüfung
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. |
AW: LockBox3 String AES Verschlüsselung - Fehler in der Bereichsprüfung
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz