Frage

In einem Java Application Stack mit Spring & Hibernate (JPA) in der Data Access Layer, was sind gute Methoden der Passwort-Verschlüsselung Anwendung (hoffentlich Annotationen verwenden), und wo können Sie mehr über immer es getan (Tutorial herausfinden, etc)?

Es ist selbstverständlich, dass ich ein JCA verwenden würde, unterstützte Algorithmus für die Passwörter zu verschlüsseln, aber ich würde es vorziehen, nicht die Wrapper Logik zu implementieren, wenn es eine einfache Möglichkeit ist.

Ich war bei Jasypt suchen, und war a) fragen, ob das eine gute Option ist und wie es zu tun und b) was sonst Menschen für diese verwenden. Wenn jemand Jasypt oder eine alternative Verwendung, Details Ihrer Erfahrung wäre es toll.

War es hilfreich?

Lösung

Java hat alle erforderlichen Bibliotheken bereits für Sie bereitgestellt. Einfach eine Dienstprogramm Methode erstellen, die mit einem Salz unter OWASP .

Wenn Sie wirklich nicht wollen, dass Code besitzen und keine zusätzliche Abhängigkeit dagegen, so scheint es, dass die Shiro Bibliothek (ehemals JSecurity ) eine Implementierung von dem, was durch beschrieben wird OWASP.

Es sieht auch wie die JASYPT Bibliothek, die Sie erwähnt hat eine ähnlicher Dienstprogramm .

Ich weiß, dass diese Antwort nicht Frühling nicht erwähnt oder Ruhezustand, aber ich bin mir nicht klar, wie Sie hoffen, sie in diesem Szenario zu nutzen.

Andere Tipps

Sie können mit Jasypt mit Hibernate Ihre Eigenschaften zu verschlüsseln oder Hash-on the fly, wenn das ist, was du schaust nach. Der eigentliche Algorithmus zur Berechnung Digests (Hashes) ist ziemlich einfach, die JCE verwenden, wenn Sie Ihre eigenen als auch rollen soll.

MD5 oder SHA-256 wäre in Ordnung, obwohl MD5 jetzt knackbar ist.

Vielleicht falsch verstanden habe ich das Problem, aber es sollte nur die Hash-Passwörter zu vergleichen werden.

In Hibernate, speichern nur als String. Auf der Validierung Seite hat eine Methode wie:

public validate(String user, String pass)
{
    if(getUser(user).getPass().equals(getHash(pass)))
        return true;
    return false;
}

Es scheint keine Ruhe spezifische Art und Weise, um es mit Jasypt zu tun, aber Sie können ein Passwort Verschlüssler im Frühjahr ein:

  <!-- 
   Set up string digester here so we can configure it for more pools if it's a problem... 
  -->
  <bean id="stringDigester" class="org.jasypt.digest.PooledStringDigester">
    <!-- same settings as StrongPasswordGenerator -->
    <property name="poolSize" value="2"/>
    <property name="algorithm" value="SHA-256"/>
    <property name="iterations" value="100000"/>
    <property name="saltGenerator">
      <bean class="org.jasypt.salt.RandomSaltGenerator"/>
    </property>
    <property name="saltSizeBytes" value="16"/>
  </bean>

  <!-- ...and then we only have to deal with the passwordEncryptor interface in code. -->
  <bean id="passwordEncryptor" class="com.myproject.util.StringPasswordEncryptor">
    <property name="stringDigester" ref="stringDigester"/>
  </bean>

Danach rufen Sie context.getBean ( "passwordEncryptor"), um den Verschlüssler zu bekommen, und rufen Sie dann entweder EncryptPassword () oder check ().

Wenn Sie Frühling verwenden in der Anwendung, dann können Sie auch Spring Security verwenden, die Sie mit mehreren Passwort-Encoder liefert, dh ShaPasswordEncoder Sie können es finden auf Stackoverflow

Ich habe gerade etwas Ähnliches wie SHA-256(username + ":" + password + ":" + salt) und speichern sie in der Datenbank in einer 64-Zeichenspalte namens passwd.

Wikipedia sagt, in Zusammenhang mit Salzen: „Salz Data Dictionary-Attacken erschwert, die Pre-Verschlüsselung von Wörterbucheinträgen verwenden. Jedes Bit verwendeten Salze verdoppelt die Menge an Speicherplatz und Rechen erforderlich ... Für eine optimale Sicherheit, das Salz Wert ist geheim gehalten, aus der Passwort-Datenbank getrennt. Dies bedeutet einen Vorteil bietet, wenn eine Datenbank gestohlen wird, aber das Salz nicht. "

So zu authentifizieren, erhalten Benutzer von der Datenbank mit Benutzername geliefert, dann den gleichen Hash generiert das Passwort über ihre Anmeldeversuch mit Hilfe des mitgelieferten und in der Datenbank zu, dass vergleichen. Fügen Sie auch in einem gewissen Preis für Anmeldeversuche zu begrenzen (beispielsweise 5 pro Zeitraum von 5 Minuten). Wenn der Benutzer sein Passwort vergisst, mailen sie nie das Passwort (wie Sie es nicht getan haben), noch ihnen ein neues generiertes Passwort per E-Mail, sondern ihnen einen Link per E-Mail das Passwort mit einem Passwort ändern key / nonce / Salz ändern in die URL, die Sie überprüfen gegen können.

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