#java #password-encryption
#java #пароль-шифрование
Вопрос:
Я даже не знаю, возможно ли это.
СЦЕНАРИЙ:
У меня есть главный ключ для хранилища ключей внутри моего кода. Что-то вроде
private static final char[] pwd = "password".toCharArray();
Я должен защитить свой «пароль» также при декомпиляции.
Я имею в виду, по крайней мере, попытаться создать что-то вроде JAPH
Я прекрасно знаю, что совершенно невозможно сделать мой пароль безопасным и нечитаемым, но, по крайней мере, я хотел бы сделать его как можно более сложным.
Комментарии:
1. вы правы, единственное безопасное место для ввода пароля — это человеческий мозг. Но вы можете усложнить чтение, преобразовав его побитово в шестнадцатеричные числа или кодировку base64 (или их комбинацию). Байтовый XOR с определенной датой создания файлов был бы другой идеей, но это может быть хрупким.
Ответ №1:
Первый метод заключается в том, чтобы распределить пароль в отдельном файле и прочитать их во время выполнения через Properties
API. Легко и просто. Если вы добавите к этому некоторую кодировку base64, это защитит вас от дочерних скриптов. Публикация исходного кода предоставит только метод хранения пароля. Конечно, утечка кода и файла по-прежнему остается проблемой.
Второй метод очень похож. Сохраните пароль как переменную среды и прочитайте их через System.env
. В этом случае, чтобы узнать пароль, злоумышленнику необходимо получить доступ к ОС для чтения пароля. Это немного усложняет задачу.
Третий метод заключается в двухэтапном вводе пароля. Первый пароль, который вы сохраняете с помощью 2-го метода, — это пароль к зашифрованному AES файлу, который содержит основной пароль.
В нашем проекте мы используем 2-й метод. Это защищает нас от раскрытия пароля в случае утечки кода (каким-то образом), однако, если кто-то нарушит безопасность сервера… тогда у нас будет гораздо более серьезная проблема, чем утечка пароля.
ps. вы могли бы попробовать поиграть с медовым шифрованием, чтобы сделать его немного сложнее. Злоумышленник не будет знать, что у него есть действительный пароль или просто что-то, что только выглядит.