AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

CRC32 mit DEC erzeugt stimmt nicht?

Ein Thema von BlueStarHH · begonnen am 24. Jul 2009 · letzter Beitrag vom 21. Aug 2010
Antwort Antwort
Seite 2 von 2     12
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
648 Beiträge
 
Delphi 10.3 Rio
 
#11

Re: CRC32 mit DEC erzeugt stimmt nicht?

  Alt 24. Jul 2009, 16:31
Zitat von gammatester:
Die Erklärung für die unterschiedlichen CRC-Werte hat himitsu doch schon gegeben. Wenn in Deiner Datei die neun Asciizeichen '1'..'9' bzw #49..#57 stehen, und die CRC $CBF43926 sein soll, so muss definitiv diese CRC genommenen werden, mit folgenden Rocksoft-Parametern:

Code:
CRC32_Zip: TCRCParam = (poly  : longint($04C11DB7);
                        init  : longint($FFFFFFFF);
                        xorout : longint($FFFFFFFF);
                        check : longint($CBF43926);
                        width : 32;
                        refin : true;
                        refout : true;
                        name  : 'CRC32/Zip');
                       {alias : 'CRC-32'}
                       {alias : 'CRC-32/ADCCP'}
                       {alias : 'PKZIP'}

Und beim DEC ist das nun mal CRC_32.
Nein, beim DEC ist $04C11DB7 die CRC_32CCITT. Hier der Code aus dem DEC:

Delphi-Quellcode:
  procedure CRCTab;
  asm
    // Polynom Bits InitVec FinitVec Inverse
    DD $000000D1, 8, $00000000, $00000000, -1 // CRC_8 GSM/ERR
    DD $00000233, 10, $00000000, $00000000, -1 // CRC_10 ATM/OAM Cell
    DD $0000080F, 12, $00000000, $00000000, -1 // CRC_12
    DD $00008005, 16, $00000000, $00000000, -1 // CRC_16 ARC,IBM
    DD $00001021, 16, $00001D0F, $00000000, 0 // CRC_16 CCITT ITU
    DD $00008408, 16, $00000000, $00000000, -1 // CRC_16 XModem
    DD $00864CFB, 24, $00B704CE, $00000000, 0 // CRC_24
    DD $9DB11213, 32, $FFFFFFFF, $FFFFFFFF, -1 // CRC_32
    DD $04C11DB7, 32, $FFFFFFFF, $FFFFFFFF, -1 // CRC_32CCITT
    DD $04C11DB7, 32, $FFFFFFFF, $00000000, -1 // CRC_32ZModem
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

Re: CRC32 mit DEC erzeugt stimmt nicht?

  Alt 25. Jul 2009, 23:35
CRCCalc(CRC_32CCITT, '123456789', 9) ergibt korrekter Weise $CBF43926.

Delphi-Quellcode:
  FS := TFileStream.Create('c:\test.txt', fmOpenRead);
  try
    WriteLn(IntToHex(CRCCalcEx(CRC_32CCITT, FS.Read), 8));
  finally
    FS.Free;
  end;
ergibt ebenfalls $CBF43926 wenn die Datei wirklich nur 123456789 enthält.

Gruß Hagen
Angehängte Dateien
Dateityp: pas crc_157.pas (15,2 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#13

AW: CRC32 mit DEC erzeugt stimmt nicht?

  Alt 21. Aug 2010, 11:42
Hallo,

Ich muss diesen Thread nochmal auspacken.
Und zwar hab ich das Problem, dass das DEC 5.1 und 5.2 mir unterschiedliche CRC32-Werte bei gleichem Code liefern.

Benutze ich die CRC_157.pas von Hagen über mir, stimmt der CRC32 wert, nehm ich die CRC.pas ausm aktuellen DEC 5.2 Part I erhalte ich einen falschen Wert. Kann mir das jemand erklären?

Ich benutze Delphi 2010 Professional.

Delphi-Quellcode:
CRCInitThreadSafe;

function CheckCRC32(const AStream: TStream; TargetCRC32: string;
  out FileCRC32: string): Boolean;
var
  NumericCRC: Cardinal;
begin
  try
    NumericCRC := CRCCalcEx(CRC_32CCITT, AStream.Read);
    FileCRC32 := IntToHex(NumericCRC, 2);
    Result := CompareText(TargetCRC32, FileCRC32) = 0;
  except
    Result := False;
  end;
end;
Wie gesagt, mit der CRC.pas vom DEC 5.1 kommt der korrekte Wert raus, beim 5.2er nicht
Ich benutzt CRCInitThreadSafe, da ich die Berechnung später über die OTL parallelisieren möchte.
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#14

AW: CRC32 mit DEC erzeugt stimmt nicht?

  Alt 21. Aug 2010, 12:38
schon mal den source von version 5.1 zu 5.2 auf unterschiede geprüft?
Gruß
Cookie
  Mit Zitat antworten Zitat
Benutzerbild von Assertor
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

AW: CRC32 mit DEC erzeugt stimmt nicht?

  Alt 21. Aug 2010, 13:16
Hallo H4ndy,

bitte prüfe, ob Du die gefixte Version von 17.12.2008 hast. Diese liegt bei Luckie:
http://www.michael-puff.de/Programmierung/Delphi/DEC/

Diese und ähnliche Zeilen mußt Du (mehrfach) im Source von CRC.pas finden können:
{$IFOPT O-}{$O+}{$DEFINE NoOpt}{$ENDIF} Bis auf diesen Fix für C++ Builder und Source Code Formatierung habe ich nichts (!) im Code von CRC.pas zwischen DEC 5.1 und DEC 5.2 geändert.

Ich habe die 5.2 selbst unter 2009 im Einsatz gehabt und nutze sie nun produktiv mit Delphi 2010. Ich kann o.g. Problem nicht nachvollziehen - die CRCs stimmen. Die Rocksoft Paramter müssen ggf. zwischen DEC 3 und DEC 5.x angepasst werden, aber das ist ja hier nicht der Fall.

Vergleichst Du vielleicht Ansi & Unicode Daten? Dann muß jetzt etwas anderes rauskommen.

Gruß,
Assertor
Frederik
Assertor
Embarcadero Tech Partner & Indy Team (OpenSSL). Bitte keine Supportanfragen per PN!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf