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.