Шифрование строки внутри кода (JAPH)

#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. вы могли бы попробовать поиграть с медовым шифрованием, чтобы сделать его немного сложнее. Злоумышленник не будет знать, что у него есть действительный пароль или просто что-то, что только выглядит.