Как хранить зашифрованный пароль в базе данных? - PullRequest
3 голосов
/ 15 марта 2011

Я пытаюсь сохранить пароль в базе данных в зашифрованном виде с помощью JSP и Servlets.Как я могу это сделать?

Ответы [ 3 ]

8 голосов
/ 28 декабря 2011

Самостоятельно написанные алгоритмы представляют собой угрозу безопасности, и их трудно поддерживать.
MD5 небезопасен .

Используйте алгоритм bcrypt, предоставленный jBcrypt (с открытым исходным кодом):

// Hash a password
String hashed = BCrypt.hashpw(password, BCrypt.gensalt());

// Check that an unencrypted password matches or not
if (BCrypt.checkpw(candidate, hashed))
    System.out.println("It matches");
else
    System.out.println("It does not match");

Если вы используете Maven, вы можете получить библиотеку, вставив следующую зависимость в ваш pom.xml (если доступна более новая версия, пожалуйста, дайте мне знать) :

<dependency>
    <groupId>de.svenkubiak</groupId>
    <artifactId>jBCrypt</artifactId>
    <version>0.4.1</version>
</dependency>
0 голосов
/ 15 марта 2011

Вы также можете использовать что-то вроде ниже. Ниже приведен метод шифрования, который принимает ввод строки и возвращает зашифрованную строку. Вы можете передать пароль этому методу.

public static String crypt(String str) {
    if (str == null || str.length() == 0) {
        throw new IllegalArgumentException(
                "String to encrypt cannot be null or zero length");
    }

    StringBuffer hexString = new StringBuffer();

    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(str.getBytes());
        byte[] hash = md.digest();

        for (int i = 0; i < hash.length; i++) {
            if ((0xff & hash[i]) < 0x10) {
                hexString.append("0"
                        + Integer.toHexString((0xFF & hash[i])));
            } else {
                hexString.append(Integer.toHexString(0xFF & hash[i]));
            }
        }
    } catch (NoSuchAlgorithmException e) {

    }

    return hexString.toString();
}
0 голосов
/ 15 марта 2011

Попробуйте что-то вроде этого, чтобы зашифровать ваши данные.

MessageDigest md = MessageDigest.getInstance("MD5");


......


synchronized (md) {

md.reset(); 
byte[] hash = md.digest(plainTextPassword.getBytes("CP1252"));

StringBuffer sb = new StringBuffer();
for (int i = 0; i < hash.length; ++i) {
sb.append(Integer.toHexString((hash[i] & 0xFF) | 0x100).toUpperCase().substring(1, 3));
}

String password = sb.toString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...