Byte array checksumme

soeni1987

Mitglied
Huhu,

ich habe folgendes Problem und stelle mich zu doof an.

Ich habe ein Bytearray welches aus einer Datei eingelesen wurde. Ist 190kb groß

Als Beispiel sagen wir es wäre 2 Bytes groß

0xaa
0x55

jetzt möchte ich alle Bytes aufsummieren (den Überlauf nutzen)

0xaa + 0x55 = 0x36

Wie mach ich das? wenn ich das einfach aufsummiere bekomme ich -1 raus.
 
Ähm ... nur so am Rand die Frage : was genau hast du damit vor ? Eine Checksumme bilden ? Das geht in Java *und auch anderen Sprachen* deutlich einfacher als da auf Byte-Ebene mit irgendwelchen Pufferüberläufen zu arbeiten.

Ansonsten sei dir gesagt : wenn du den Überlauf ausnutzen willst musst du eine eigene Rechenmethode schreiben die dies macht. Da es in Java unüblich ist ein solches Verhalten gezielt zu bekommen ist Java dagegen halbwegs gesichert und lässt sich so einfach nicht dazu überreden soetwas zuzulassen.
 
Und warum muss es ausgerecht eine solche Methode sein ? Warum nimmst du nicht einfach einen standardtisierten Hash-Algorythmus wie SHA-256 ?
Außerdem wären es noch zu wenig Infos um eine halbwegs vernüftige Methode schreiben zu können. Mindestens bräuchte man noch :
1) Grundwerte mit denen begonnen wird zu Hashen
2) Hash-Breite - wie viele Bytes hat der Hash ?
3) Operationen pro Runde - was wird wann wie genau gerechnet ?
4) Padding - wie sollen die Input-Daten auf entsprechende Block-Länge gebracht werden wenn die Anzahl an Input-Bytes nicht restlos durch die Hash-Breite teilbar ist ?

Du siehst : es bedarf schon etwas mehr als einfach nur : möchte alle Bytes eines InputStreams mit Werteüberlauf addieren.
 
Ich möchte nicht hashen. Nur die bytes aufaddieren. Jedoch als unsigned. Ich brauch das u m das in eine Datei zu schreiben welche ein anderes Programm öffnet.
 
Hi

Ohne jetzt den Rest gelesen zu haben: In Java gibt es kein unsigned

Und was ist am Aufsummerien selber das Problem?
Schleife duch und fertig.

edit:
Noch was:
0xaa+ 0x55 ist -1
...das "Problem" im Anfangspost ist also nur ein Rechenfehler von dir.

0xaa=170
0x55=85

170+85=255

255=0xff
Als signed -1

Gruß
 
@sheel
made my day

@TO
Ich verstehe immer noch nicht was du mit AUFSUMMIEREN meinst.
In Java sind alle Datentypen Vorzeichenbehaftet *wie sheel sagte : es gibt kein unsigned*. Das ist in ungefähr das was ich in meinem Post meinte : in Java ist es nicht ohne weiteres möglich den Überlauf zu nutzen da Java auf Grund des signed dagegen gesichert ist. Wie du bei 0x55 + 0xaa auf 0x36 kommst möchte ich dann aber bitte auch mal vorgerechnet bekommen.

Und wie gesagt : eine ganze Datei ... egal ob jetzt nur wenige kB oder mehrere MB mit einer Methode *wie auch immer* so "zusammenzurechnen" das man am Ende nur ein einziges Byte hat ... dahinter erschließt sich mir der Sinn nicht wirklich.

Auch ist der Titel irre führend. Wenn du von "Checksum" redest dann meinst du ein Hash-Verfahren, denn Checksum ist die Bezeichnung für das Ergebnis der Hash-Funktion.

Wenn du uns also jetzt noch mal genauer erklärst was genau du willst und was dabei rauskommen soll können wir dir vielleicht helfen, midestens aber brauchen wir jedoch die 4 von mir angesprochenen Punkte da 1 Byte nun mal nur 8 Bit hat und sich daraus rechnerisch auch nur 256 Permutationen ergeben dürftest du relativ schnell auf Kollisionen treffen.
 
Zurück