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"));
}
Hallo Ayke,
wie?
herbivore
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"));