Frage

Ich habe eine Eigenschaft in Java-Datei, in welcher ich speichere alle Informationen meiner app, wie Logo-Bild-Dateiname, Datenbankname, Datenbankbenutzer und Datenbankkennwort.
Ich kann das Passwort auf der Eigenschaften-Datei verschlüsselt speichern.
Aber kann der Schlüssel oder Passwort aus dem Glas mit einem Decompiler gelesen werden.
Gibt es eine Möglichkeit, den db Pass zu speichern in einer Eigenschaft sicher Datei?

War es hilfreich?

Lösung

Es gibt mehrere Möglichkeiten, dies zu verwalten. Wenn Sie einen Weg finden, um einen Benutzer haben, ein Passwort für einen Schlüsselspeicher zur Verfügung stellen, wenn die Anwendung der am besten geeignete Art und Weise startet würde alle Werte zu verschlüsseln, mit einem Schlüssel, und speichern Sie diese Schlüssel im Schlüsselspeicher. Die Befehlszeilenschnittstelle für den Schlüsselspeicher ist unter Verwendung von Keytools. Allerdings APIs JSE hat programmatisch als auch die Schlüsselspeicher zugreifen zu können.

Wenn Sie keine Möglichkeit haben, einen Benutzer manuell ein Kennwort zum Schlüsselspeicher beim Start zur Verfügung stellen (etwa für eine Web-Anwendung), eine Möglichkeit, es zu tun, ist eine außerordentlich komplexe Verschleierungs Routine zu schreiben, die den Schlüssel verschleiern und speichern sie auch in einer Eigenschaftendatei. Wichtige Dinge zu erinnern ist, dass die Verschleierung und deobfuscation Logik mehrschichtiger sein sollte (könnte beinhalten Scrambling, Kodierung, Einführung von falschen Zeichen etc. etc.) und sollte sich mindestens einen Schlüssel haben, die in anderen Klassen in der Anwendung versteckt werden könnten Verwendung von nicht intuitiven Namen. Dies ist kein völlig sicher Mechanismus da jemand mit einem Decompiler und eine Menge Zeit und Intelligenz kann um sie noch arbeiten, aber ist die einzige, die ich von denen nicht weiß, Sie benötigen in native zu brechen (dh. Nicht leicht rückübersetzbar) -Code .

Andere Tipps

Sie speichern einen SHA1-Hash des Passworts in Ihrer Eigenschaftsdatei. Dann, wenn Sie ein Benutzer-Passwort zu validieren, hash Sie ihre Login-Versuch und stellen Sie sicher, dass die beiden Hashes übereinstimmen.

Dies ist der Code, der einige Bytes für Sie Hash wird. Sie können ganz einfach ger Bytes aus einem String mit der getBytes() Methode.

/**
     * Returns the hash value of the given chars
     * 
     * Uses the default hash algorithm described above
     * 
     * @param in
     *            the byte[] to hash
     * @return a byte[] of hashed values
     */
    public static byte[] getHashedBytes(byte[] in)
    {
        MessageDigest msg;
        try
        {
            msg = MessageDigest.getInstance(hashingAlgorithmUsed);
        }
        catch (NoSuchAlgorithmException e)
        {
            throw new AssertionError("Someone chose to use a hashing algorithm that doesn't exist.  Epic fail, go change it in the Util file.  SHA(1) or MD5");
        }
        msg.update(in);
        return msg.digest();
    }

Nein, es ist nicht. Auch wenn Sie es verschlüsseln, wird jemand den Code dekompilieren, die es entschlüsselt.

Sie können eine separate Eigenschaften machen Datei (außerhalb des jar) für Passwörter (entweder direkt DB Passwort oder oder Schlüsselkennsatz) und nicht beinhalten, dass Objekte mit der Verteilung Datei. Oder Sie könnten den Server nur machen können, dass die Anmeldung von einer bestimmten Maschine übernehmen, so dass Spoofing erforderlich wäre.

Neben der Passwörter verschlüsselt, wie oben beschrieben stellen alle Passwörter in separaten Properties-Datei und beim Entfalten versuchen, diese Datei zu geben, die die meisten gesperrten Berechtigungen möglich.

Zum Beispiel, wenn Ihr Application Server läuft unter Linux / Unix als root dann die Passwort Eigenschaftsdatei von root mit 400 / -r-------- Berechtigungen im Besitz machen.

können nicht haben Sie den App Kontakt einen Server über https und das Passwort herunterladen, nachdem sie in gewisser Weise natürlich Authentifizierung?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top