асимметрично зашифрованная строка, сохранение зашифрованной строки и открытого ключа в файле свойств для чтения другой программой - PullRequest
0 голосов
/ 30 января 2019

У меня есть строка, которая будет сохранена в файл .properties, который я не хочу изменять пользователем.Файл .properties предназначен для отправки этому другому пользователю, и во время выполнения вытяните строку, которую я не хочу изменять.Мое текущее решение состоит в том, чтобы симметрично зашифровать строку и сохранить как зашифрованную строку, так и ключ к файлу .properties, который затем будет расшифрован во время выполнения.Проблема с этим подходом состоит в том, что если пользователь декомпилирует файлы .class, он может ясно увидеть метод, которым была зашифрована строка (в этом случае вектор инициализации для шифрования "AES"), и повторить процесс шифрования с другой строкой., полностью обходя меры безопасности.Есть ли способ зашифровать строку асимметрично, сохраняя при этом открытый ключ с зашифрованной строкой в ​​файле свойств для дешифрования во время выполнения?Из того, что я прочитал, я думаю, что мне нужно использовать RSA, но все, что я нашел, касается объектов открытого и закрытого ключей, которые, я не думаю, могут быть записаны в файл свойств.Любая помощь очень ценится (даже совершенно другое решение, которое использует RSA) Спасибо!

1 Ответ

0 голосов
/ 30 января 2019

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

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

В руководстве по Java есть глава, в которой показано, как это сделать с помощью классов, представленных вjava.security: https://docs.oracle.com/javase/tutorial/security/apisign/index.html

...