AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DEC 5.2 String hashen?

Ein Thema von a.def · begonnen am 2. Mai 2017 · letzter Beitrag vom 7. Mai 2017
Thema geschlossen
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

AW: DEC 5.2 String hashen?

  Alt 5. Mai 2017, 15:16
Result := THashFunctions_Selftest.CalcHash([B]Trim(TEncoding.ANSI.GetString[/B](aByteStream.Bytes, 0, aByteStream.Size - iHashLengthInBytes))); Warum kannst Du Dich nicht von dem verf***** String trennen?

Siehst Du in dem Beispiel vom Michael II irgendwo einen String oder ein Char?

U.U wäre es ganz vernünftig, wenn Du noch einmal ganz von vorne anfangen würdest.....

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
 
a.def
(Gast)

n/a Beiträge
 
#2

AW: DEC 5.2 String hashen?

  Alt 5. Mai 2017, 15:20
Zitat:
Warum kannst Du Dich nicht von dem verf***** String trennen?
Was soll denn an dem String so schlimm sein? Er wird vollkommen korrekt in meine Exe geschrieben und auch geladen. Was will ich denn mehr?
Ich habe schon alles auf TBytes umgestellt. Aber den Rückgabewert möchte ich dennoch gerne als String haben.

P.S.: kein Grund ausfallend zu werden
 
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: DEC 5.2 String hashen?

  Alt 5. Mai 2017, 15:41
a) Ein String(char ist eine Interpretation eines Zahlenwertes. Je nach Codepage und oder anderer Annahme (nutzt Du vllt. EBCDIC?) produziert diese Interpretation beim selben Wert ein anderes Zeichen.
b) ich weiß jetzt nicht was an verflixt so ausfallend ist, aber vllt. ist es besser ich verabschiede mich ins WE.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
 
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
772 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: DEC 5.2 String hashen?

  Alt 5. Mai 2017, 15:46
Hallo a.def,

ich habe dir hier noch rasch die ähnliche Funktion für SHA1 geschrieben:

Delphi-Quellcode:
procedure AddSHA1HashBytes( var lHasher: THashSHA1; const AStream: TStream; von, bis : int64 );
const
   BufferSize = 64*1024;
var
  lStreamBytes: TBytes;
  Lies, SollLesen : int64;
  len : integer;
begin
  if bis >= AStream.size then bis := Astream.size-1;
  if von < 0 then von := 0;
  if bis >= von then
  begin
    setlength(lStreamBytes, BufferSize);
    AStream.Position := von;
    SollLesen := bis-von+1;
    while SollLesen > 0 do
    begin
      if SollLesen >= BufferSize then Lies := BufferSize else Lies := SollLesen;
      len := Astream.ReadData(lStreamBytes, Lies);
      if len = 0 then break;
      dec(SollLesen,len);
      lHasher.Update(lStreamBytes, len);
    end;
  end;
end;



function GetSHA1HashFromFile( aFileName : string; vonbis : array of int64 ) : TBytes;
var f : TFileStream;
   lSHA1: THashSHA1;
   i, len : integer;
   von, bis : int64;

begin
  f := TFileStream.Create( aFileName, fmOpenRead );
 try
  lSHA1 := THashSHA1.Create;
  lSHA1.Reset;
  len := length(vonbis);
  if len < 2 then
  begin
      AddSHA1HashBytes( lSHA1, f, 0, f.Size-1 );
  end
  else
  begin
      i := 0;
      while len-i >= 2 do
      begin
        von := vonbis[i];
        bis := vonbis[i+1];
        if von < 0 then von := f.Size+von;
        if bis < 0 then bis := f.Size+bis;

        AddSHA1HashBytes( lSHA1, f, von, bis);
        inc(i,2);
      end;
  end;
  Result := lSHA1.HashAsBytes;
 finally
  f.Free;
 end;
end;


Wenn du von Byte 0 bis 2000 und von Byte 2001 bis ans Ende hashen willst:

GetSHA1HashFromFile( filename, [0, 2000, 2001, maxint] );

Damit hashst du übers ganze File und erhältst natürlich exakt den gleichen Wert wie via
System.hash.THashSHA1.GetHashBytesFromFile( filename );

Beispiel 2:
Wenn du die 20 Bytes 192435 - 192454 nicht "mithashen" willst:
GetSHA1HashFromFile( filename, [0, 192434, 192455, maxint] );
Wenn du deinen SHA1 Hash Wert h ins Programm schreibst und h ab Position 192435 abgelegt ist, dann ist dies der Aufruf der Wahl .

Beispiel 3:
Ein positiver Wert n wird interpretiert als Fileposition n.
Ein negativer Wert n wird interpretiert als Fileposition fsize+n.

GetSHA1HashFromFile( filename, [0, -21] );

Wenn du zum Beispiel an dein File einen SHA1 Hash (20 Bytes) angehängt hast, dann hashst du in diesem Beispiel über dein File, nicht aber über den angehängten Hash Wert.

Beispiel 4:
Du kannst natürlich über beliebig viele Intervalle hashen, zum Beispiel über drei:
GetSHA1HashFromFile( filename, [0,255, 256+pesig, 256+pesig+peofs-1, -20,maxint] );
Michael Gasser

Geändert von Michael II ( 5. Mai 2017 um 18:57 Uhr)
 
Thema geschlossen


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:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:03 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