AES, Buffer und Bytes

Kaji Lim

Mitglied
Hi,

ich will eine AES Verschluesselung für File Objekte implementieren.
Leider führt AES mich an meine Wissensgrenzen, aber man lernt ja sonst nix.
Bevor ich ein File Objekt Verschlüsseln kann, nehm ich mir doch lieber erstmal Strings vor,
bis zum File ist es ja dann nicht mehr weit, denke ich.

Als Vorlage dient mir das Programm von Sun.
Using AES with Java Technology

Springen wir direkt zur asHash()Methode.

Java:
		for (i = 0; i < buf.length; i++) {
			if (((int) buf[i] & 0xff) < 0x10)
				strbuf.append("0");

			strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
		}


Was passiert bei append("0")? Hängt das Programm hier einfach den Wert an den neuen Stringbuffer an?

Um nochmal genauer darauf einzugehen:
Java:
if (((int) buf[i] & 0xff) < 0x10)
bzw.
strbuf.append(Long.toString((int) buf[i] & 0xff, 16));

Ich kenne mich mit Bytes nicht sonderlich aus, bin noch nicht so weit in meinem Semester 🙁
Ich hab kapiert, dass es sich um einen AND bit operator handelt. Wieso wird, wenn >0x10 (größer 15?)
eine 0 angehängt? buff könnte doch jeden Wert über 15 haben. Ich glaube ich habe das ganze Prinzip noch nicht verstanden.

Mehr will ich erstmal nicht fragen, reicht ja schon???:L

Kaji

Edit:
Ich hab schonmal kapiert, dass es sich bei der if Abfrage zum teil um eine Bit Operation handelt

buf AND 11111111, wobei da immer buf rauskommt, wenn ich mich nicht irre, weil buf ja nicht größer wird als 255, oder?
 
Zuletzt bearbeitet:
Du meinst asHex() und nicht asHash() oder?

Wenn ich totalen Blödsinn erzähle, entschuldige ich mich mal im vorraus. Zu großer Koffeinschock um klar zu denken. :X

Die Funktion wandelt dir den Input zeichenweise in Hexadezimal um.
Zur if-Abfrage: 0x9 ist vom Format her kürzer als 0x10. Bei der Umwandlung wird jetzt 0x09 draus.
Und da das überall der Fall sein kann, wird auch gleich der Buffer mit doppelter Länge reserviert.
 
Zuletzt bearbeitet:
Sieh die mal den Wertebereich von
Code:
byte
an!

Anders als in C gibt es in Java keine
Code:
unsigned
primitiv types (ausser char).
Schau dir mal die Ausgabe von folgendem Code an. Das Ergebnis wird dich sicher ueberraschen.

Java:
		for (byte i = Byte.MIN_VALUE; i <= Byte.MAX_VALUE; i++) {
			System.out.println("byte=" + i + " / unsigned=" + (i & 0xff)
					+ " / hex=0x" + Long.toString((i & 0xff), 16));
			if (i == Byte.MAX_VALUE)
				break;
		}


Wieso wird, wenn >0x10 (größer 15?) eine 0 angehängt?

Falsch die Bedingung lautet
Code:
< 0x10
(kleiner 16). Weil Zahlen von 0-15 in Hex einstellig dargestellt werden und somit eine 0 angehaengt werden muss.

dez
Code:
15
-> hex
Code:
f
=
Code:
0f
 

Zurück
Oben