#java #mysql #database #encryption #passwords
#java #mysql #База данных #шифрование #пароли
Вопрос:
Я нашел много вопросов на эту тему и много ответов, но ни один из них не подходил к моей ситуации. Если я пропустил один или два, не стесняйтесь направлять меня к подходящему. Пожалуйста, имейте в виду, что у меня есть только базовые знания Java, и я всегда готов изучать новые вещи, если они правильно объяснены.
Недавно я начал писать Java-приложение, требующее безопасного входа в систему. Я решил, что лучший способ сделать это (для нескольких пользователей) — использовать базу данных MySQL на сервере, к которому у меня был полный доступ (другими словами, мой RaspBerry Pi). Я правильно настроил базу данных и создал учетную запись пользователя, которую я хочу использовать для запроса данных.
Когда пользователь открывает приложение, оно проверяет, имеет ли приложение доступ к Интернету (путем пинга нескольких веб-сайтов), и имеет ли приложение доступ к серверу (путем пинга самого сервера). Местоположение сервера и базы данных может быть раскрыто. Когда оба соединения будут подтверждены, приложение запустится, запрашивая у пользователя имя пользователя и пароль, хранящиеся в базе данных MySQL.
Реальная проблема заключается в подключении к базе данных, без того, чтобы люди находили пароли других людей. Я не хочу, чтобы какой-то ребенок декомпилировал мое приложение и получил все имена пользователей и пароли, хранящиеся в базе данных. Как я смогу безопасно получить доступ к своей базе данных (то есть, как я буду подключаться к ней, не видя имя пользователя и пароль)? Я также надеюсь сохранить пароли в базе данных в зашифрованном виде, расшифровав их после их извлечения. Самая важная проблема — убедиться, что никто не сможет декомпилировать приложение, узнать, как я это сделал, и сделать это самостоятельно, предоставив им всю информацию, которую я пытался скрыть.
Комментарии:
1. храните хэш пароля вместо обычного текста или зашифрованных паролей
2. Мне любопытно, что вы нашли в своих поисках, поскольку это довольно распространенный вопрос не только здесь, но и на других сайтах. Можете ли вы рассказать нам, почему решения, которые вы нашли, не работают для вас? В противном случае вы попросите нас переписать многое из того, что уже было написано, и написано хорошо.
3. @HovercraftFullOfEels Большая часть того, что я нашел, использовала пароль шифрования, который должен был храниться в приложении, чтобы позволить любому другому расшифровать его так же, как я. Я также обнаружил, что люди хранят пароли в зашифрованном виде в файле свойств, который затем будет защищен операционной системой в виде разрешений на доступ к файлам, но их легко взломать с помощью простых приложений, если не только терминала вашего компьютера. Третьим распространенным решением был какой-то веб-запрос, с которым я совсем не знаком, то есть я не вижу, чтобы это работало хорошо.
Ответ №1:
Вероятно, лучше, чтобы каждый пользователь вводил свой собственный пароль, а не делился им как частью приложения. Дополнительным преимуществом является возможность блокировать доступ отдельного пользователя, когда это необходимо, без перераспределения вашего приложения.
Кэшируете ли вы их пароль в приложении на компьютерах пользователя или заставляете их вводить его каждый раз, зависит от вашего уровня паранойи.
Комментарии:
1. И да, убедитесь, что пароли на сервере хэшированы, а соединение осуществляется по протоколу SSL. MySQL имеет встроенные функции для хэширования паролей. Пусть сервер выполняет шифрование / дешифрование, поэтому, если кто-то получит доступ к таблице, он просто увидит зашифрованные значения.
2. Как я уже сказал, я еще не слишком много знаю о Java, поэтому я учусь. Не могли бы вы дать мне ссылку на учебное пособие о том, как это сделать?
3. Теперь я настроил его так, чтобы он сохранял зашифрованные пароли в базе данных и сопоставлял их с зашифрованной версией паролей, которые вводят пользователи, но я до сих пор понятия не имею, как скрыть пароль, который я использую для подключения к базе данных..