BlowFish - decrypting



  • Dann speicher doch die Länge des Passworts gleich mit - entweder im Klartext oder verschlüssle die Länge auch.

    Die Schnittstelle zwischen den Programmen ist fest definiert, da kann ich nicht die länge einfach noch dau nehmen.

    Hat niemand vielleicht noch ne Idee?

    Hab mir gerade OpenSSL runtergeladen, nur steig ich irgendwie nicht durch, wie ich OpenSSL in mein Programm linken muss.

    Danke & cu
    Claus



  • '\0' anhängen. Aber schon vor dem Verschlüsseln.

    Bye, TGGC (Demo or Die)



  • Ich hab eine andere BlowFish-Implementierung verwendet,
    die dieses Problem nicht hat.
    siehe: http://www.codeas.com/solutions.php

    cu
    Claus



  • Oder das hier:
    http://www.schneier.com/blowfish-download.html

    btw, OpenSSL ist übrigens nicht ganz so einfach zu verwenden.

    Gruß,
    Cosmixx



  • cwanner schrieb:

    ich versuche gerade (bzw. seit ner ganzen weile) ein verschlüsselte Passwort mit BlowFish wieder zu entschlüsseln.
    [..]
    Mein Problem ist jetzt, dass das Passwort zwischen 4 und 8 Stellen haben kann.
    Wenn ich der decrypt-Methode eine 8 mitgebe und das Passwort nur 5 Stellen hat, bekomm ich dass Entschlüsselte Passwort + 3 Zeichen die zufällig im Speicher stehn.

    Sicher, dass es um DEIN Passwort geht, probier halt mal 4, 5, 6, 7 oder 8 zu übergeben?



  • Das problem ist doch noch nicht gelöst!

    Sicher, dass es um DEIN Passwort geht, probier halt mal 4, 5, 6, 7 oder 8 zu übergeben?

    Es ist natürlich nicht MEIN Passwort, sondern das Passwort eines Anwenders, dessen Passwort verschlüsselt an mich bzw. meine Applikation übertragen wird und ich die Anmeldung am BackEnd-System machen muss.
    Um das ganze noch etwas zu verkomplizieren, wird das encryptete Passwort noch mit Base64 encodet. Meine Applikation muss das Passwort also erst Base64 decoden und anschliessend BlowFish decrypten.

    Soweit ich das Problem jetzt eingrenzen konnte passiert folgendes:

    En-/Decrypting in C++ => funktioniert ohne Probleme
    En-/Decrypting in Java => funktioniert ohne Probleme
    Base64 Encoding + Encrypting auf Java UND Base64 Decoding + Decrypting in C++ => Problem

    Der char wird nicht mit \0 terminiert und da ich nicht weis, wie lange dass Passwort vorher war, habe ich irgend welchen Datenmüll in meinem char stehn. Eine Allokierung des char vor dem Decrypting bringt auch kein Erfolg, da der Blowfish den kompletten char neu beschreibt.

    Daher meine Vermutung:
    In Java wird der String nicht mit \0 terminiert, bevor dieser Base64 decodiert und decyrpted wird. Somit fehlt der C++-Applikation nach der Base64 Decodierung die Terminierung des char und der Blowfish decyrpted eben bis der char "voll" ist (bei maximal 8 Zeichen).
    Da kann man dem alten KugelFisch eigentlich nix vorwerfen, aber ich konnte diese Vermutung noch nicht untermauern und weis im Moment auch noch nicht, wie ich Java dazu bringe den String mit \0 zu terminieren.
    Eine Idee wäre, der Passwort-String wird vor dem Decoding und Dycrying in den ein byte-Array (Java-Typ) gecastet, das Byte-Array am Ende mit einem Dezimalwert für \0 zu erweitern (müsste in Dezimal auch 0 sein).

    Bin für jede Hilfe und Tipp sehr sehr sehr Dankbar!

    Danke & Gruß
    Claus



  • Dir ist schon klar, dass n die Größe des Ausgabepuffers ist? 🙄



  • ... schrieb:

    Dir ist schon klar, dass n die Größe des Ausgabepuffers ist? 🙄

    Wie meinst Du das jetzt?

    Das Passwort MUSS zwischen 5 und 8 Zeichen lang sein.

    Ich hab heute noch folgenden Versuch angestellt.

    encrypting und encoding in C++
    anschliessend
    decoding und decrypting in C++
    => Alles geht wunderbar, der String wird richtig terminiert.

    encrypting und encoding in Java
    anschliessend
    decoding und decrypting in C++
    => der String wird NICHT terminiert

    Meine Schlussfolgerung:
    Java hat kein \0 und verarbeitet dieses auch nicht vom encrypting und decoding,
    somit kann C++ beim Decoding und Decrypting nicht wissen, an welcher Stelle der String aufhört, oder?

    Meine "Lösungen":
    1. Ich bekomme die Länge des Passworts übergeben
    2. Java muss VOR dem Encrypting ein "\0" anhängen, da dieses von C++ später benötigt wird.

    Auf eine andere Lösung bin ich noch nicht gekommen.

    Danke & Gruß
    Claus



  • er (oder sie^^ (unwarscheinlich)) meint das n nicht die länge des entschlüsselten passwortes ist, sondern die größe des puffers in das dieses reinkommt



  • -[NULL]- schrieb:

    er (oder sie^^ (unwarscheinlich)) meint das n nicht die länge des entschlüsselten passwortes ist, sondern die größe des puffers in das dieses reinkommt

    Genau das ist der Hacken an der Sache.
    Wenn ich nicht weis wie lange der Buffer ist, kann ich den Buffer auch nicht mit \0 terminieren und habe nach dem eigentlich entschlüsselten Passwort noch irgend welchen Datenmüll stehn.
    Eine vorbelegung mit \0 bringt auch nichts, da der Blowfish schon nicht erkennt, an welcher Stelle der String zu Ende ist.

    Gruß
    Claus


Anmelden zum Antworten