2016-08-13 2 views
2

Мне нужно сохранить имя пользователя и пароль в текстовом файле в этом формате: имя пользователя # пароль. Есть ли способ в Java скрывать символы паролей? Итак, если я открою, что пароль txt-файла не может быть прочитан.Скрыть пароль в текстовом файле

+2

* если я открыть этот текстовый файл пароль не может быть прочитан * Если вы не можете прочитать его, вы не можете использовать его - так ** должен быть удобочитаемым. Надеюсь, вы не думаете, что имя пользователя и пароль, которые вы вставляете в такой файл, будут храниться в секрете. Даже если вы зашифруете файл, ваша программа имеет в нем ключ дешифрования. И любой, у кого есть соответствующие разрешения - например, человек, выполняющий этот процесс, имеет доступ к памяти процесса и может получить имя пользователя и пароль. –

+1

Дополнительная информация о пользе, это на каждого пользователя, на пользовательском устройстве, на сервере? Как используется пароль и с какой целью. Кто является злоумышленником и какое значение ($$) защищено? – zaph

+2

Как уже сказал zaph, вы должны написать, действительно ли вам нужно восстановить пароль (например, отправить его другой службе), или если это необходимо только для аутентификации. В последнем случае вы можете сохранить только _hash_ пароля (BCrypt, SCrypt, PBKDF2) и проверить введенный пароль с помощью этого хэша. – martinstoeckli

ответ

2

txt файл является открытым текстом файл, а это означает, что вы не можете скрыть его содержимое, если вы зашифровать его:

Simplest way to encrypt a text file in java

В качестве альтернативы, если изменение требований является вариант, вы можете хранить хэш вместо пароля:

How can I hash a password in Java?

+1

В общем ** не шифруют пароли **, что небезопасно. Кроме того, как вы будете защищать пароль шифрования? – zaph

0

код выглядит следующим образом:

public class mjm { 

public static void main(String[] args) { 
    String k="[email protected]#abcd1234"; 
    //xyz.gmail.com is id and abcd1234 passward 
    //encrypting passward starts here 
    char[] b=k.toCharArray(); 
    System.out.println(k); 

    for(int a=0;a<b.length;a++) 
    { 
     int c=(int)(b[a]); 
     c=c^31; 
     b[a]=(char)c; 
    } 
    k=new String(b); 
    System.out.println(k); 
    //decryption code of above encrypted code is as follow 
    b=k.toCharArray(); 
    for(int a=0;a<b.length;a++) 
    { 
     int c=(int)(b[a]); 
     c=c^31; 
     b[a]=(char)c; 
    } 
    k=new String(b); 
    System.out.println(k); 
    } 
} 

Вы должны шифровать и дешифровать с таким же номером 31. Идентификатор [email protected] и пароль abcd1234 (оба разделенных #).

Первый цикл for - зашифровать их в текстовый файл, который не читается. Второй цикл for - это дешифрование зашифрованного кода до нормального. Вам просто нужно запомнить фактор XOR, который равен 31.

+0

** Не шифруйте пароли **, когда злоумышленник получает БД, он также получит ключ шифрования. Далее этот алгоритм ужасно защищен! См. Комментарий к @Zek. – zaph

0

Для паролей я настоятельно рекомендую искать хеш-функции, такие как MD5, SHA-1, SHA-256, SHA-512, xxHash и т. Д. Вместо шифрования.

Если вы действительно хотите использовать шифрование, вы можете попробовать AES. (https://en.wikipedia.org/wiki/Advanced_Encryption_Standard)

Пример AES Java-код: https://gist.github.com/bricef/2436364#file-aes-java

+0

Просто использовать хеш-функцию недостаточно, и просто добавление соли делает мало для улучшения безопасности. Вместо этого перейдите по HMAC со случайной солью в течение приблизительно 100 мс и сохраните соль с хешем. Используйте такие функции, как password_hash, PBKDF2, Bcrypt и аналогичные функции. Дело в том, чтобы заставить злоумышленника потратить много времени на поиск паролей грубой силой. – zaph

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