Java - шифрует / дешифруют имя пользователя и пароль от конфигурационного файла

Если вы хотите создать неизменяемый массив, нет, вы не можете. Все массивы в Java изменяемы.

Если вы просто хотите предопределить массив в своем классе, вы можете это сделать:

private static final int[] MY_ARRAY = {10, 20, 30, 40, 50};

Здесь мы создали предопределенный массив MY_ARRAY длины 5, поэтому MY_ARRAY[0] - 10 и т. д. Будьте осторожны, хотя даже если поле MY_ARRAY объявлено окончательным, это не означает, что элементы массива не могут быть изменены. Таким образом, лучше не публиковать этот массив публике с помощью модификатора public или protected.

14
задан nzpcmad 3 December 2008 в 22:39
поделиться

2 ответа

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

Это кажется, что существует стороннее приложение, для которого у Вас есть один набор учетных данных и некоторые клиенты, которые эффективно совместно используют эти идентификационные данные при использовании стороннего приложения. Если это так, я рекомендую следующий подход.

не распределяют стороннего пароля вне Вашего веб-сервера.

самый безопасный способ сделать это должно предоставить его веб-приложению в интерактивном режиме. Это мог быть ServletContextListener, который запрашивает пароль, поскольку приложение запускается, или страница в приложении так, чтобы администратор мог ввести его через форму. Пароль хранится в ServletContext и используется для аутентификации запросов в стороннем сервисе.

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

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

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

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

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

18
ответ дан 1 December 2019 в 06:39
поделиться

Как я понимаю во всяком случае для вызова стороннего веб-сервиса, Вы передаете пароль как простой текст, и никакие сертификаты безопасности не включены.

Затем я сказал бы, что самый легкий подход должен будет сохранить пароль в зашифрованном формате (через механизм шифрования Java), когда шифрование/ключ расшифровки просто трудно кодируется в коде.

я определенно сохранил бы его на стороне сервера (файловая система, или дб) скорее затем распределяют и поддерживают его на нескольких клиентах.

Вот то, как это могло работать с шифрованием "DES":

// only the first 8 Bytes of the constructor argument are used 
// as material for generating the keySpec
DESKeySpec keySpec = new DESKeySpec("YourSecr".getBytes("UTF8")); 
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(keySpec);
sun.misc.BASE64Encoder base64encoder = new BASE64Encoder();
sun.misc.BASE64Decoder base64decoder = new BASE64Decoder();
.........

// ENCODE plainTextPassword String
byte[] cleartext = plainTextPassword.getBytes("UTF8");      

Cipher cipher = Cipher.getInstance("DES"); // cipher is not thread safe
cipher.init(Cipher.ENCRYPT_MODE, key);
String encrypedPwd = base64encoder.encode(cipher.doFinal(cleartext));
// now you can store it 
......

// DECODE encryptedPwd String
byte[] encrypedPwdBytes = base64decoder.decodeBuffer(encryptedPwd);

Cipher cipher = Cipher.getInstance("DES");// cipher is not thread safe
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] plainTextPwdBytes = (cipher.doFinal(encrypedPwdBytes));
26
ответ дан 1 December 2019 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: