sha hash

Liebe community

Ich verstehe nicht, wieso es bei der Ausgabe zwischen den beiden untenstehenden Varianten, diesen Unterschied gibt. Was zur Hölle gibt die Variante "plain Java" zurück? Ein Binärer String ist es nicht, da dieser ja nur aus 1 und 0 bestehen müsste. Kann mir das jemand plausibel erklären.

Mein Verständnis:
Bei 2. wird zuerst das Password in ein Bytearray gewandelt. Danach wird aus dem Bytearray ein Bytearray mit dem Hashwert des Passwords erzeugt. Am Schluss wird das gehashte Bytearray als String ausgegeben. Wieso dann dieser Unterschied zur Variante 1.

Java:
    String password = "1234";

    // 1. hashing with Google Guava:
    String hashed = Hashing.sha256().hashString(password, StandardCharsets.UTF_8).toString();
    System.out.println(hashed);  // 03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4

    // 2. hashing with plain Java
    byte[] bytePassword = password.getBytes("UTF-8");
    MessageDigest sha = MessageDigest.getInstance("SHA-256");
    byte[] key = sha.digest(bytePassword);
    System.out.println(new String(key));  // �gB��\v��U�g�6#ȳ��E��x��F�
 
X

Xyz1

Gast
new String() erwartet ein byte[]. Einmal ist es ein Hexadezimalstring, einmal raw data. Hast du doch schon richtig erkannt? Es kommt halt auf die weitere Verwendung an.
 
X

Xyz1

Gast
Nehmen wir mal hexadezimal 'A', das ist als char 65, dezimal 11 und binär 1011. Verstehste?

Und zweiterer Fall ist für die weitere Verwendung wirklich vorzuziehen, wie bereits richtig erkannt.
 
Ja das verstehe ich. Mein Nickname ist 4a61766120617274697374 das ist gemäss ASCII Tabelle "java artist". Das ist mir alles bewusst. Was heisst Raw Data(Rohe Daten).
Code:
�gB��\v��U�g�6#ȳ��E��x��F� // ist ja nicht Hex oder Binär? Was ist das?
 
Für ein long ist das etwas zu lang. :D Wie? Naja, z. B. mit deiner oben genannten Lib.!

In etwa so? ;)
Java:
String password = "1234";
byte[] bytePassword = password.getBytes(StandardCharsets.UTF_8);
MessageDigest sha = MessageDigest.getInstance("SHA-256");
byte[] key = sha.digest(bytePassword);
System.out.println(new String(key));  // �gB��\v��U�g�6#ȳ��E��x��F�

StringBuffer hexString = new StringBuffer();
for (int i = 0; i < key.length; i++) {
  String hex = Integer.toHexString(0xff & key[i]);
  if (hex.length() == 1) hexString.append('0');
  hexString.append(hex);
}

System.out.println(hexString.toString()); // 03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
 
Zuletzt bearbeitet:

Tobse

Top Contributor
Sagt mir jetzt nicht viel.
Wie wandle ich diese als "Unicode interpretierte raw data" in einen lesbaren String zurück. Und wie funktioniert das umgekehrt.

Um hier mal etwas klarheit zu schaffen:

Die zweite Variante gibt ein byte[] zurück. Also ein Array von Zahlen im Bereich von -128 bis 127:

Java:
byte[] rawBytes = new byte[] { (byte) 27, (byte) 13 }

Die erste Variante nimmt diese Daten und geht noch einen Schritt weiter:
Es wandelt die einzelnen Bytes in Integers ohne Vorzeichen um (womit aus dem Zahlenbereich -128 bis 127 0 bis 255 wird), berechnet die Hexadezimaldarstellung (siehe dein Nickname) für die positive Zahl, stellt ggf. eine führende 0 an und verbindet das zu einem String. Um aus der erste Variante die zweite zu bekommen, kannst du dashier machen:

Java:
String hash = "ff42ac5fd21bdac"; // u.s.w.
byte[] rawHash = (new java.math.BigInteger(hash, 16)).toByteArray();

Und in die andere Richting genau so:
Java:
byte[] rawBytes = new byte[] { (byte) 0xFF, (byte) 0x42, (byte) 0x2a } // ...
String stringHash = (new java.math.BigInteger(rawBytes)).toString(16);
while (stringHash.length() < rawBytes.length() * 2) {
    stringHash = "0" + stringHash;
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
bluetrix Hash Set hälfte entfernen Java Basics - Anfänger-Themen 7
RudiRüssel maximale Anzahl von Schlüsseln in einer Hash Tabelle Java Basics - Anfänger-Themen 2
J alternierendes Probing-Verfahren für Hash-Tabellen implementieren Java Basics - Anfänger-Themen 0
L Programmierung mit Hash Java Basics - Anfänger-Themen 3
J HashSet Methode contains liefert false (hash Methode überschrieben) Java Basics - Anfänger-Themen 3
B Denkanstoß - Hash ID für URL Java Basics - Anfänger-Themen 7
E Hash map Value Wert hochzuholen/ändern Java Basics - Anfänger-Themen 7
A Hash Tabelle Element suchen Java Basics - Anfänger-Themen 1
B Vererbung In offener Hash Tabelle einfügen Java Basics - Anfänger-Themen 4
T Hash von doubles generieren Java Basics - Anfänger-Themen 5
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
E Hash Code dekodieren? Java Basics - Anfänger-Themen 20
T Hash Map Java Doc Einführung Java Basics - Anfänger-Themen 9
E Hash Map - Null Pointer Exception? Java Basics - Anfänger-Themen 3
MU5T4NG JPasswordField als Hash in Datenbank abspeichern Java Basics - Anfänger-Themen 3
L MD5 Hash berechnen Java Basics - Anfänger-Themen 2
P Casten Hash Map Java Basics - Anfänger-Themen 4
F Hash problem Java Basics - Anfänger-Themen 29
W automatischer password hash Java Basics - Anfänger-Themen 11
M Eigene Hash Funktion Java Basics - Anfänger-Themen 5
E Hash Map?? Java Basics - Anfänger-Themen 12
K eigene Hash-Datenstruktur Java Basics - Anfänger-Themen 2
J Hash-Maps / ArrayLists testen Java Basics - Anfänger-Themen 12
I Hash Wert von Dateien erzeugen Java Basics - Anfänger-Themen 2
H java hash map: cd ablageprogramm Java Basics - Anfänger-Themen 2
G Implementieren einer Hash-Datenstrucktur Java Basics - Anfänger-Themen 3
C MD5-Hash in Java Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben