Laden...

Probleme mit SH1 und C++

Erstellt von Ayke vor 15 Jahren Letzter Beitrag vor 15 Jahren 935 Views
Ayke Themenstarter:in
643 Beiträge seit 2006
vor 15 Jahren
Probleme mit SH1 und C++

Ich versuche einen Hash zu machen. Dieser muss so aussehen wie bei der Methode in C++. Mein Problem ist das mir in C# 2 Zeichen am ende Fehlen.
Das Lösung liegt meiner Meinung nach an der var tail. Daraus wird wohl irgenwas berechtnet was 2 Byte gross ist und hinten angefügt wird. Was da aber brechnet wird kann ich nicht sagen. Diese Funktion "wsprintf(TmpBuf,"%s%2.2X",HashStr,tail); die einen String speichert ist dafür verantwortlich. Nur was passiert da mit dem letzten Parameter ?

So sieht der Hash aus C++ aus.
635569f1a411001c89f16709d47d7ae0211bdce070

So sieht der Hash in C# aus.
635569f1a411001c89f16709d47d7ae0211bdce0

C++ Version

char TmpBuf[128];
unsigned char tail=0;// variable to calculate value 
for the last 2 bytes
// convert to a character string in hexadecimal 
notation
for(int i=0;i<20;i++){
unsigned char c = Buffer[i];
tail+=c;
wsprintf(TmpBuf,"%s%2.2X",HashStr,c);
strcpy(HashStr,TmpBuf);
}
// add the last 2 bytes
wsprintf(TmpBuf,"%s%2.2X",HashStr,tail);
strcpy(HashStr,TmpBuf);

Meine C# Version

            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }
Ayke Themenstarter:in
643 Beiträge seit 2006
vor 15 Jahren

Gelöst...

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Ayke,

wie?

herbivore

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 15 Jahren

Die letzten zwei Bytes ist die Checksumme aus den Hash.


            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }

            int summe = 0;
            for (int i = 0; i < sBuilder.ToString().Length; i += 2)
            {
                string Substring = sBuilder.ToString().Substring(i, 2);
                summe = summe + int.Parse(Substring, System.Globalization.NumberStyles.HexNumber);
            }
            sBuilder.Append((Convert.ToByte(summe % 256)).ToString("x2"));