Einzelnen Beitrag anzeigen

dschiffler

Registriert seit: 25. Okt 2006
30 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: MD5 - Unterschiede zw. Indy und DEC6

  Alt 19. Mär 2024, 14:07
Beide Methoden haben als Parameter einen ganz normalen String.

Indy
function HashStringAsHex(const AStr: String; ADestEncoding: IIdTextEncoding = nil): String;

In der Methode wird HashString aufgerufen (als Parameter auch ein ganz normaler String).
Delphi-Quellcode:
function HashString(const ASrc: string; ADestEncoding: IIdTextEncoding = nil): TIdBytes;
var
  LStream: TStream;
begin
  LStream := TMemoryStream.Create;
  try
    WriteStringToStream(LStream, ASrc, ADestEncoding);
    LStream.Position := 0;
    Result := HashStream(LStream);
  finally
    FreeAndNil(LStream);
  end;
end;
In WriteStringToStream steht u.a. folgendes:
LBytes := ToBytes(AStr, LLength, AIndex, ADestEncoding); Ohne Encoding-Angabe ist der Standard bei Indy dann ASCII.

DEC6
function CalcString(const Value: string; Format: TDECFormatClass = nil): string; overload;
Delphi-Quellcode:
function TDECHash.CalcString(const Value: string; Format: TDECFormatClass): string;
var
  Size : Integer;
  Data : TBytes;
begin
  Result := '';
  if Length(Value) > 0 then
  begin
    {$IFDEF HAVE_STR_LIKE_ARRAY}
    Size := Length(Value) * SizeOf(Value[low(Value)]);
    Data := CalcBuffer(Value[low(Value)], Size);
    {$ELSE}
    Size := Length(Value) * SizeOf(Value[1]);
    Data := CalcBuffer(Value[1], Size);
    {$ENDIF}
    Result := StringOf(ValidFormat(Format).Encode(Data));
  end
  else
  begin
    SetLength(Data, 0);
    result := StringOf(ValidFormat(Format).Encode(CalcBuffer(Data, 0)));
  end;
end;
In der Methode wird CalcBuffer aufgerufen,
function TDECHash.CalcBuffer(const Buffer; BufferSize: Integer): TBytes; in der mit dem übergebenen Wert dann als untypisierter Buffer weitergearbeitet wird.
Liebe Grüße
Dirk Schiffler
  Mit Zitat antworten Zitat