как создавать и использовать зашифрованные файлы свойств в Java?

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

  1. После создания не должно быть перезаписано.
  2. После создания никто не сможет прочитать зашифрованные данные.


Как я смогу использовать файл в своем проекте после создания?


person Ashish Agarwal    schedule 22.02.2011    source источник
comment
Когда вы пишете: после создания никто не сможет прочитать зашифрованные данные. Что ты конкретно имеешь ввиду? Должен ли файл быть зашифрован известным кому-то ключом? Или вы просто хотите сделать одностороннее шифрование (хеширование?).   -  person Luciano Fiandesio    schedule 22.02.2011
comment
@Luciano: Да, точно так же. Один человек будет держать закрытый ключ.   -  person Ashish Agarwal    schedule 23.02.2011


Ответы (5)


Вы можете использовать javax.crypto.Cipher[Input|Output]Stream для чтения/записи ваших данных; однако вам придется применить функцию однократной записи в вашем коде... возможно, вы сравниваете данные с хэшем SHA или чем-то еще, чтобы убедиться, что они не были изменены.

Я сталкивался с менеджерами лицензий с открытым исходным кодом и коммерческими для Java ... вы можете поискать, чтобы не изобретать велосипед.

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

Надеюсь это поможет.

person cjstehno    schedule 22.02.2011

Попробуйте: библиотеку Jasypt, если она соответствует вашему сценарию использования.

Он предоставляет класс EncryptableProperties для прозрачного управления и расшифровки зашифрованных значений в файле .properties. Также возможна интеграция в систему конфигурации Spring Framework.

person Ozair Kafray    schedule 22.02.2011

Стандартное шифрование в Java довольно простое. Я предлагаю ознакомиться с справочным руководством. инструкции по использованию пакета javax.crypto. Однако я призываю вас пересмотреть свой дизайн, если он требует конфиденциальных данных, хранящихся на клиентских машинах, которым вы не доверяете пользователи. Причина, по которой я говорю это, заключается в том, что для того, чтобы ваша программа могла получить доступ к информации, ей нужно было бы иметь ключ шифрования/дешифрования, хранящийся внутри, что означало бы, что ключ будет храниться где-то в архиве. В лучшем случае он будет храниться как переменная в одном из class файлов. Изучение двоичного файла класса для определения этого ключа было бы тривиальным. По крайней мере, вам следует подумать об обфускации вашего кода шифрования, чтобы хотя бы немного затруднить идентификацию ключа, просто изучив двоичный код или декомпилировав файл класса.

person Chris Thompson    schedule 22.02.2011

Смотрите ответ на этот другой вопрос:

Защита пароля в файле свойств

Там рекомендовалось использовать jasypt.

person Christian Vielma    schedule 21.02.2013

Файлы свойств — это удобочитаемый способ хранения карты. Если вы не хотите, чтобы он был удобочитаемым для человека, он не должен быть файлом свойств.

Один из способов получить файл свойств с зашифрованными данными — зашифровать значения определенных полей и использовать базу 64 для преобразования их в текст.

person Peter Lawrey    schedule 22.02.2011