2012-05-22 5 views
-1

Я пытаюсь зашифровать пароль, используя MD5, в регистрации пользователя и сопоставляя его во время входа в систему. Я использую Mysql в качестве моей базы данных. Mysql также предлагает возможность конвертировать пароль в MD5 (то есть MD5 (пароль)). Я хочу знать, какой из них лучше всего зашифровать. Использует ли он код Java или mysql.Шифрование пароля в Java или MySQL?

Заранее спасибо.

+0

Вы также можете прочитать http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html –

+3

Это не шифрование: это хеширование MD5. Хеширование - это правильная вещь, которую нужно сделать, но вы должны называть ее по ее правильному имени. SHA-хэш будет гораздо более безопасным. – EJP

ответ

3

Поскольку логически ваше приложение и база данных могут существовать в двух отдельных физических ячейках, более безопасным вариантом является шифрование вашего пароля на прикладном уровне, а затем перенос его в базу данных.

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

Offtopic:

MD5 склонен к collision attack, вы бы рассмотреть вопрос об использовании salt как добавление электронной почты или динамически сгенерированные значения для предотвращения Rainbow Table.

definitely-safest-password-storage-scheme

10
+0

Он не хранит пароли. Ваш вопрос? – EJP

+0

сопоставление паролей при входе в систему с зашифрованными означает, что он будет хранить пароли в mysql. в этом-то и дело. – AlphaMale

+1

Нет, дело в том, что он * * хранит хэши паролей. Прочтите вопрос. Он искажает слово «шифрование» и должен использовать SHA, а не MD5, но в противном случае он делает именно то, что вы сказали, что он должен делать. – EJP

2

Вот алгоритм, который я использую для шифрования с MD5.It возвращает ваш зашифрованный вывод.

public class CryptWithMD5 { 
    private static MessageDigest md; 

    public static String cryptWithMD5(String pass){ 
    try { 
     md = MessageDigest.getInstance("MD5"); 
     byte[] passBytes = pass.getBytes(); 
     md.reset(); 
     byte[] digested = md.digest(passBytes); 
     StringBuffer sb = new StringBuffer(); 
     for(int i=0;i<digested.length;i++){ 
      sb.append(Integer.toHexString(0xff & digested[i])); 
     } 
     return sb.toString(); 
    } catch (NoSuchAlgorithmException ex) { 
     Logger.getLogger(CryptWithMD5.class.getName()).log(Level.SEVERE, null, ex); 
    } 
     return null; 


    } 
} 

Вы не можете расшифровать MD5, но вы можете сравнить выходы, так как если вы поставите ту же строку в этом методе он будет возвращать тот же зашифрованный output.If вы хотите расшифровать вам нужно, чтобы использовать SHA.You будет никогда используйте decription для пароля пользователя. Для этого всегда используйте MD5. Это исключение довольно избыточно. Оно никогда не бросит его.Когда вы добавляете пароль в базу данных, вы добавляете то, что этот метод возвращает. Для входа в систему вы их сравниваете.

Смежные вопросы