AGB  ·  Datenschutz  ·  Impressum  







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

CRC32 für einzelne Wörter!

Ein Thema von fes · begonnen am 6. Jul 2005 · letzter Beitrag vom 28. Jan 2009
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#11

Re: CRC32 für einzelne Wörter!

  Alt 6. Jul 2005, 23:00
Ansonsten nimmst du die Unit aus deinem ersten Link. Dort gibt es die Funktion "RecountCRC()" die du benutzen kannst.

Delphi-Quellcode:
function RecountCRC(b: byte; CrcOld: Longint): Longint;
begin
  RecountCRC := CRCTable[byte(CrcOld xor Longint(b))] xor ((CrcOld shr 8) and $00FFFFFF)
end;

function CRCString(const Value: String): Cardinal;
var
  I: Integer;
begin
  Result := $FFFFFFFF; // Init Wert der CRC, schau im PHP nach
  for I := 1 to Length(Value) do
    Result := RecountCRC(Ord(Value[I]), Result);
  Result := not Result; // eventl. Finit Wert, schau im PHP nach
end;
Gruß Hagen
  Mit Zitat antworten Zitat
fes

Registriert seit: 22. Mär 2004
33 Beiträge
 
Delphi 2005 Personal
 
#12

Re: CRC32 für einzelne Wörter!

  Alt 7. Jul 2005, 17:43
THX!!!
  Mit Zitat antworten Zitat
SaltJohn

Registriert seit: 9. Jun 2008
43 Beiträge
 
#13

Re: CRC32 für einzelne Wörter!

  Alt 21. Jan 2009, 16:22
Ist zwar schon etwas älter der Threat aber ich habe gerade genau das gleiche Problem. Habe einen String und möchte gerne eine CRC32 Prüfung machen. Leider ist die Unit vom ersten Link hier im Threat down. Weiß jemand eine Alternative?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.175 Beiträge
 
Delphi 12 Athens
 
#14

Re: CRC32 für einzelne Wörter!

  Alt 21. Jan 2009, 16:51
als Alternativen hätten wir noch

Hagen's Hier im Forum suchenDEC Bei Google suchenDEC (Delphi Encrytion Compendium)
http://www.michael-puff.de/Developer...agen_Reddmann/

HashLib! v1.03.exe
http://www.delphipraxis.net/internal...?p=96430#96430

vieles vieles mehr

und im Notfall noch was von mir
http://www.delphipraxis.net/internal...t.php?t=135239

Delphi-Quellcode:
Var CRC32: ThxCRC32;
  S: String;
  B: LongWord;


CRC32.InitT; // notfalls das Polynom ändern, oder 'ne andere Tabelle laden
CRC32.Calc('dein Wort');
S := CRC32.asHexString; //B := CRC32.asBin;

// oder

CRC32.InitT; // notfalls das Polynom ändern, oder 'ne andere Tabelle laden
CRC32.Init;
CRC32.Update('dein Wort');
CRC32.Final;
S := CRC32.asHexString; //B := CRC32.asBin;
der CRC32-Teil ließe sich auch "einfach" aus dem Projekt extrahieren
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
SaltJohn

Registriert seit: 9. Jun 2008
43 Beiträge
 
#15

Re: CRC32 für einzelne Wörter!

  Alt 22. Jan 2009, 08:37
Hi himitsu, erstmal danke für die ausführliche Antwort. Am liebsten würde ich auf deinen letzten Vorschlag zurückkommen allerdings weiß ich nicht genau was ich alles aus deinem Projekt benötige. Du schreibst zwar, dass sich der CRC32-Teil auch "einfach" aus dem Projekt extrahieren lassen würde, denke aber, dass dies nicht ganz auf mich zutrifft

Zu dem was ich mache:
Ich versuche mit der Snoop Component Suite Ethernet Pakete zu generieren. Der aktuelle Stand ist, dass der Rahmen fast komplett ist. Header, Länge und Daten sind bereits zu einem Hexstring verarbeitet. Mir fehlen jetzt "nur" noch die 4byte (CRC32-Checksumme) die ich zum Schluss als Hexstring anfügen möchte.


dachte da an sowas:
Delphi-Quellcode:
function crc32(Datastring: String): Integer;
begin
(...)
end

string := string + IntTohex(crc32(string))
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.175 Beiträge
 
Delphi 12 Athens
 
#16

Re: CRC32 für einzelne Wörter!

  Alt 22. Jan 2009, 11:48
Wenn du nur eine Funktion möchtest, dann mußt du dir allerdings selber was basteln,
da ich meine CRC32-Frunktionen ohne feste HashTabelle erstellt hab und diese muß erst initialisert werden.

Nicht wundern, Aufgrund des internen Aufbaus ist wirklich kein freigeben (.Free) nötig.
Und abgesehn vom CRC32 wird auch kein (.InitT aka .Create) benötigt.
Delphi-Quellcode:
Function MyCRC32(Datastring: String): String;
  Var CRC32: ThxCRC32;

  Begin
    CRC32.InitT;
    Result := CRC32.Calc(S).asHexString;
  End

aString := aString + MyCRC32(aString);
oder so
Delphi-Quellcode:
Function MyCRC32(Datastring: String; Polynom: LongWord = $EDB88320): String;
  Var CRC32: ThxCRC32;

  Begin
    CRC32.InitT(Polynom);
    Result := CRC32.Calc(S).asHexString;
  End

aString := aString + MyCRC32(aString, $12345678);
aber am Effektivsten sähe es dann so aus:
(nicht jedesmal die HashTabelle neu berechnen)
Delphi-Quellcode:
Var CRC32: ThxCRC32;

CRC32.InitT;

aString := aString + CRC32.Calc(aString).asHexString;
aString := aString + CRC32.Calc(aString).asHexString;
aString := aString + CRC32.Calc(aString).asHexString;

hab das Ganze auch gleich mal an Delphi 2009 angepaßt
und hoff es haben sich keine Fehler beim Umbau eingeschlichen.
Angehängte Dateien
Dateityp: dpr project1_210.dpr (951 Bytes, 15x aufgerufen)
Dateityp: pas fhash_single_167.pas (126,3 KB, 34x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
SaltJohn

Registriert seit: 9. Jun 2008
43 Beiträge
 
#17

Re: CRC32 für einzelne Wörter!

  Alt 22. Jan 2009, 13:38
Hab das gleich mal ausprobiert aber leider kommt bei mir bei allen drei Methoden eine mir bisher unbekannte Fehlermeldung [Pascal Fatal Error] Main.pas(250): F2084 Internal Error: URW821. Dein Beispielprojekt funktioniert allerding.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.175 Beiträge
 
Delphi 12 Athens
 
#18

Re: CRC32 für einzelne Wörter!

  Alt 22. Jan 2009, 13:55
Wie sieht denn dein TestCode aus und in welcher Delphiversion trat der Fehler auf?


füge mal in FHash_single und deine TestUnit nach dem "Interface" ein "{$INLINE OFF}" ein.
(ich weiß jetzt leider nicht, wo dieser Schalter seine Auswirkung zeigt)
vielleicht hilft's ja ... es kam anscheinend, im Zusammenhang mit mit einem ähnlichem Fehler, schonmal vor
Delphi-Quellcode:
Interface
  {$INLINE OFF}

"Advanced" Records - Internal Errors URW821 and C1624
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
SaltJohn

Registriert seit: 9. Jun 2008
43 Beiträge
 
#19

Re: CRC32 für einzelne Wörter!

  Alt 22. Jan 2009, 14:46
Also ich benutze Delphi2006. Nachdem ich bei beiden units {$INLINE OFF} eingefügt habe kommt jetzt die Meldung
Zitat:
[Pascal Fatal Error] Unit1.pas(209): F2084 Internal Error: C1624
Alles was ich gemacht habe ist deine Unit eingebunden

und in meiner Main den Aufruf mit

crcChecksum := MyCRC32(Datastring); zu

Delphi-Quellcode:
// CRC-Prüfsumme berechnen
Function TForm1.MyCRC32(Datastring: String): String;
var CRC32: ThxCRC32;
begin
  CRC32.InitT;
  Result := CRC32.Calc(Datastring).asHexString;
end;
das Programm wird nur dann fertig compiliert wenn ich Result := CRC32.Calc(Datastring).asHexString; auskommmentiere
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.175 Beiträge
 
Delphi 12 Athens
 
#20

Re: CRC32 für einzelne Wörter!

  Alt 22. Jan 2009, 14:58
versuch es mal so
Delphi-Quellcode:
Function TForm1.MyCRC32(Datastring: String): String;
var CRC32: ThxCRC32;
begin
  CRC32.InitT;
  CRC32.Calc(Datastring);
  Result := CRC32.asHexString;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 15:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz