Da hätte ich ein paar Ideen zum Thema "Datenstrukturen":

  • String: Eine Struktur und dazugehörige Funktionen zur Verwaltung von Zeichenketten.
  • Array List: Eine Struktur und dazugehörige Funktionen zur Verwaltung von beliebigen Daten mit einem Array im "Backend".
  • (Double) Linked List: Ähnlich wie Array List, nur halt als (doppelt) verlinkte Liste.
  • Dann noch Queue (First In, First Out), Stack (First In, Last Out) und für den extra lustigen Spaß mit dem Debugger: HashMap. ^^
...zur Antwort

Im einfachsten Fall so: https://www.falstad.com/circuit/circuitjs.html?ctz=CQAgjCAMB0l3BWcMBMcUHYMGZIA4UA2ATmIxAUgpABZsAoANyhFxpbGJQ4qpVxZUYCegGcQhdihTswNKTJ4AzAIYAbUQFMxE2YSpy9Q8CFUbtAdw5dd4G5HpXJd7s7D6oj251cL2DsDwIQ3APNDxQ41wDOBB+IWh-RPpA4Pk4xXCM-1ZYsFj4qESimi8s9z58F08rcpss6X8yqp84mgN7MvbqmSo2Gra+yBz+hyA

Ansonsten kommts auf die Lampe bzw. deren "Funktionen" (Dimmer, Zeitschaltung, etc...) an.

...zur Antwort

Das ist eine kleine Besonderheit:

Stringliterale werden, sofern sie inhaltlich identisch sind, zur Kompilerzeit nur als ein einziges Objekt behandelt und alle anderen Vorkommen durch Referenzen ersetzt.

In dem Fall hast du also in a und b tatsächlich das gleiche Objekt.

...zur Antwort

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/...
...zur Frage

Wenn dein C#-Code für 51cbb71a-Test den MD5-Hash 0e9af10abdb7cd7119a85967272e3bc3 raushaut, dann hast du im C#-Teil irgendeinen Fehler.

Korekt wäre 3ea811b7192d1ae6e1f021b014c169a8.

Interessanterweise ist trotzdem kein Fehler in deinem C#-Snippet zu erkennen, was die Fehlersuche nicht gerade vereinfacht...

...zur Antwort

Nix Übertreibung.

Den Leuten, die zu dumm sind ihre verdammte Maske aufzuziehen sollten man mit Sekundenkleber ein Stück Kunststofffolie vors Gesicht kleben und sie dann langsam ersticken lassen. Aber leider hat der inkompetente Gesetzgeber was dagegen...

P.S.: Man kann über Trump sagen was man will, aber seine Idee mit dem Desinfektionsmittel ins Gesicht sprühen war offensichtlich sehr vorausschauend...

...zur Antwort

Weil sie vor Krieg, Verfolgung und Diktatoren fliehen.

Würden sie in der Türkei bleiben, dann wäre das so, als würde man vom Oktoberfest zum Brauhaus gehen um dem Bier zu entkommen...

...zur Antwort

Der "Burning Man" - Norrgart Edition:

  1. Bier holen
  2. Ein Bier trinken
  3. Met holen
  4. Ein Bier trinken
  5. Alte Klamotten mit Zeitungspapier, Stroh, alten Kerzenresten, etc. ausstopfen und zu einer "Vogelscheuche" zusammenstöpseln, währenddessen Bier trinken
  6. Lampenöl über die "Vogelscheuche" kippen
  7. Ein Bier trinken
  8. Die "Vogelscheuche" anzünden
  9. Krüge, Humpen, Hörner, etc. mit Met befüllen
  10. Met trinken
...zur Antwort

Das ist im Grunde der selbe Unterschied wie der zwischen einem Obst und einem Kernobst.

Ein vServer ist einfach nur ein virtueller Server. Diese Bezeichnung sagt absolut nichts über die verwendete Virtualisierungssoftware, die Leistungsfähigkeit, oder sonst irgendetwas aus.

Ein KVM Root Server ist ein etwas spezifischerer vServer. Dabie ist immerhin die Art der Virtualisiserung definiert. Sagt allerdings immer noch nichts über die verwendete Virtualisierungssoftware (ausser, dass jetzt immerhin die Kategorie bekannt ist), die Leistungsfähigkeit, oder sonst irgendetwas aus.

...zur Antwort

Im Grunde ists mir weitestgehend egal, aber ich finds trotzdem maßlos bescheuert...

Was kommt als nächstes?

Werden evtl. "Spaghetti" in "dünne Langnudeln" umbenannt um die Italiener nicht zu diskriminieren?

Und wo wir vor kurzem erst den "Zigeunersoße/-schnitzel" Kram hatten: Was ist eigentlich mit dem u.a. bei Aldi erhältlichen "Roma Pudding"?

Dürfen Darts-Spieler eigentlich noch "ins Schwarze" treffen?

Usw...

Zum Schluss vielleicht noch eine Kleinigkeit, die mich tatsächlich selbst betrifft:

Es gab, wenn ich mich da korrekt erinnere, zumindest mal den Vorschlag (ob der tatsächlich umgesetzt wurde weiß ich allerdings nicht), "Behinderte/r" durch "Mensch mit besonderen Bedürfnissen" zu ersetzen.

Meine Meinung dazu: Meine Fresse noch eins... Solange ich meinen "Schwerbehindertenausweis" habe, werd ich keinesfalls darauf verzichten, die Frage "Alda bissu behindat oda wass?" mit "Ja, natürlich." zu beantworten und mich zumindest gelegentlich mit "Hallo, ich bin der Behinderte." vorzustellen...

...zur Antwort