Я попытался безопасно сохранить пароль в своей БД. Я читал о предмете, и все рекомендуют использовать соль и сохранить ее с паролем.Соль как было изменено после того, как я положил ее на mysql
Итак я нахожу эту реализацию:
private static byte[] setSalt() throws NoSuchAlgorithmException {
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
byte[] salt = new byte[16];
sr.nextBytes(salt);
return salt;
}
Тогда я попытался сохранить его в виде байтов в MySQL
public static void test(byte[] salt) throws Exception{
SQLconnect sql = new SQLconnect();
Object[] prepString = {salt, "admin" };
sql.runQuery("UPDATE orhalimi_cl_db.users set Salt = ? where Username = ?",
prepString,ACTION.UPDATE);
}
и здесь является обновление:
preparedStatement = connect.prepareStatement(query);
for (int i = 0; i < prepString.length; i++) {
preparedStatement.setObject(i + 1, prepString[i]);
}
preparedStatement.executeUpdate();
И когда я извлекаю соль из БД и проверяю equals
, байты разные.
Я сохраняю соль как тип binary(16)
в моей БД.
А вот как я его из БД:
List<HashMap<String, Object>> results;
SQLconnect sql = new SQLconnect();
Object[] prepString = {"Salt", "admin" };
results = sql.runQuery("SELECT ? from orhalimi_cl_db.users where Username = ?",
prepString,ACTION.SELECT);
if (results.isEmpty()) {
System.out.println("empty");
return null;
}
return ((String) results.get(0).get("Salt")).getBytes();
Я знаю, что его внешний вид, как я дал много различных деталей из моего кода, , но это похоже, что я испортит байт на сохраняя или удаляя их из MySQL. Поэтому я дал всю информацию, которая может быть актуальной.
Заранее спасибо.
Ответ:
Забавно, моя проблема заключалась в том, что я использовал ?
на всех SQL PreparedStatement, а не только на стоимости. Таким образом, он выглядел как SELECT ? from orhalimi_cl_db.users who Username = ?
, который превратился в SELECT 'Salt' from orhalimi_cl_db.users where Username = 'admin'
, и ответ был всегда солидным.
Во всяком случае, я преобразовать его в шестнадцатеричный и base64, и это намного проще
Попробуйте сохранить как blob. Кроме того, на боковой ноте я думаю, что вам нужно хэш-соль с вашим паролем. – anaxin
Пожалуйста, предоставьте 'SHOW CREATE TABLE' –