MD5-Hash bei Java und C# geben nicht das selbe Ergebnis?

Hallo zusammen,

ich versuche in den letzten Tage mich mit der Entwickleroberfläche der FritzBox auseinander zu setzen. Leider scheitete ich am Session ID Login.

Der Login funktioniert über eine Challenge (String) den mir die FritzBox generiert und dem Passwort der FritzBox. Wenn ich den Login richtig verstanden habe geht er wie folgt:

Schritt 1: Challenge erhalten via fritz.box/login_sid.lua

Schritt 2: Alle Zeichen im Passwort der FritzBox, welche nicht in ISO-8859-1  
           anzeigbar sind (einen CodePoint von über 255 besitzen) mit einem "."  
           ersetzen

Schritt 3: Einen MD5-Hash im Format von 32 Hexzeichen mit Kleinbuchstaben 
           generieren aus dem String %Challenge%-%Passwort% (%Challenge% ist die
           aus dem Schritt 1, %Passwort% ist das Passwort der FritzBox aus dem 
           Schritt 2)

Schritt 4: Das Ergebnis zum Anmelden nutzen: 
           http://fritz.box/login_sid.lua?response=%Challenge%-%Ergebnis% 
           (%Ergebnis% ist der 
           MD5-Hash aus Schritt 3)

So: Was ist nun mein Problem?

Ich möchte diesen MD5-Hash generieren. Ich habe mir bereits Tutorials angeschaut, wie die von baeldung.com und auch einen String als Ergebnis bekommen. Das Problem ist aber, dass der Hash falsch ist.

Also habe ich mir den Beispiel C#-Code auf der FritzBox Webseite angeschaut und ausprobiert. Das Ergebnis ist ein ganz anderer Hash. Wie kommt das zu Stande?

Damit man mich besser versteht, habe ich hier meinen Java Code und den Code aus C#.

Input bei allen:

51cbb71a-Test

Java (Möglichkeit 1): https://pastebin.com/vpzA8mr9 (um Platz zu sparen als Link)

Output:

DigestTest: 3e2a82112b721922d21a2e62e12f02212b02142c12692a82

Java (Möglichkeit 2):

StringBuilder builder = new StringBuilder();
for (byte b : DigestUtils.md5(input)) {
    builder.append(byteToHex(b));
}
System.out.println("BuilderDigest: " + builder.toString());

Output:

BuilderDigest: 3ea811b7192d1ae6e1f021b014c169a8

Java (Möglichkeit 3):

String md5Hex = DigestUtils.md5Hex(input); //API: commons-codec-1.15.jar
System.out.println("Hash: " + md5Hex);

Output:

Hash: 3ea811b7192d1ae6e1f021b014c169a8

C#

static void Main(string[] args) {
  try {
    MD5 md5Hasher = MD5.Create();
    byte[] encoded = Encoding.Unicode.GetBytes("51cbb71a-Test");
    byte[] data = md5Hasher.ComputeHash(encoded);
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < data.Length; i++) {
      builder.Append(data[i].ToString("x2"));
    }
    Console.WriteLine(builder.ToString());
  } catch(IndexOutOfRangeException exception) {
    Console.WriteLine("null");
  }
}

Output:

0e9af10abdb7cd7119a85967272e3bc3

Wieso kommt da was anderes raus und wie kann ich das nun auch in Java umsetzen? (Der C#-Code gibt die richtige Lösung!)

Danke schon einmal im Voraus!

Links die Helfen können:

  • https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/Session-ID_deutsch_13Nov18.pdf
  • https://www.baeldung.com/java-md5 (etwas alt)
  • https://www.youtube.com/watch?v=hW2s03abGaI
  • https://codedocu.de/...
Computer, programmieren, Java, C Sharp, Encoding, Informatik, Verschlüsselung
Ist dieser PC gut für Gaming?

Der Link ist unten.

Prozessor: Intel Coren i7 3770, 4 x 3900 MHz (3400 MHz ohne Last, bis zu 3900 MHz mit Last durch die Intel Boost Technik)

Mainboard: Intel DB75EN Mainboard (1x PCI 16x, 2x PCI, 1x VGA, 1x DVI, 2x USB 3.0, 4x USB-A 2.0, 1x Gb LAN, 3x Klinke, 2x PS/?2, 4x DDR3 Slots)

Arbeitsspeicher: 16 GB DDR3 RAM (Dual Channel)

SSD: 512 GB SSD (Windows und Programme starten enorm schnell durch eine SSD)

DVD-Brenner: 22x Dual Layer Multiformat DVD-Brenner (CD-R, CD-RW, DVD±R, DVD±RW, DVD+R9 (DL))

3D-Grafikkarte: NVIDIA Geforce GTX 1650 4GB DDR5, DirectX 12, DVI, HDMI (Leistungswerte siehe Bilder)

Gehäuse: Midi Tower (H: 40cm x B: 17cm x T: 43cm), Seitenteile einzeln abnehmbar, Farbe schwarz

USB 3.0: ja, 4x, (2x davon Front USB), sowie extra 4x USB 2.0 hinten

Netzwerk: 10/100/1000 MBit/s Ethernet LAN, DSL fähig

WLAN: ja, 150 MBIT, USB-Adapter, bereits fertig eingesteckt und installiert

Sound: integrierter OnBoard 5.1 Controller, HD Audio

Netzteil: 250 Watt Super Silent Netzteil

Betriebssystem: Original Microsoft Windows 10 Professional 64 Bit (komplett mit Treibern installiert und bereits aktiviert)

Office: MS Office 2010 Starter Vollversion inkl. Word 2010 und Excel 2010 - kein Abo, unbegrenzte Laufzeit

Virenscanner und Internetschutz: GData Internet Security (neueste Version) Vollversion, inkl. 1/2 Jahr Updates

Hier Link: https://www.amazon.de/Monster-Jahren-Garantie-Threads-Geforce/dp/B085CG3351/ref=mp_s_a_1_6?dchild=1&keywords=gaming+pc&qid=1601203850&s=computers&sr=1-6

Wenn Ned könnt ihr mir einen empfehlen um 600 Euro.

PC, Computer, Technik, Gaming PC, Technologie, Beratungshilfe, Spiele und Gaming

Meistgelesene Beiträge zum Thema Computer