2015-02-08 4 views
3

У меня есть программа java, скомпилированная как .jar, и для этого требуется активировать ключ активации. Я хочу, чтобы jar запросил ключ активации на первом runtime и после его активации сохранил строку, которую он мог прочитать в течение более позднего времени runtimes, чтобы определить, была ли она включена.Сохранение строк в java-файлах для более поздних времен работы банки? Попытка сделать строку, которая сообщает моей баночке, если она была активирована или нет.

Любые предложения о том, как это сделать?

Примечание: Я хочу, чтобы строка хранилась тайно, поэтому кто-то не мог обмануть программу, считая ее включенной.

Update: Я играл с апи предпочтения, и я использую этот код для хранения, если программа была включена:

String key = "userKey"; 
String saveString = "enabled"; 
Preferences root = Preferences.userRoot(); 
root.put(key, saveString); 

И это, если получить в ходе последующего выполнения:

String key = "userKey"; 
String failedtoLoad="Program not enabled"; 
Preferences root = Preferences.userRoot(); 
String status=root.get(key, failedToLoad); 

Каждый раз, когда я запускаю статус программы, заканчивается неудача с загрузкой, а saveString не найден, если только я не сохраняю строку и не получаю строку в той же среде выполнения. Почему это?

+1

Насколько безопасно вы это хотите? Обратное проектирование вашей банки будет по-прежнему жизнеспособным вариантом, если вы не предпримете шаги по запутыванию и/или шифрованию кода. – JDong

+0

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

+0

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

ответ

1

Посмотрите API-интерфейс Java (http://docs.oracle.com/javase/8/docs/technotes/guides/preferences/index.html). Он позволяет сохранять настройки и данные конфигурации между выполнением вашей программы.

О секретности: Как уже упоминалось в JDong, если ваша программа должна быть в состоянии ее прочитать, очень вероятно, что кто-то еще может ее прочитать, это, в конце концов, вопрос о том, насколько сложно вы это сделаете их. Лучше всего иметь некоторую строку, которую ваша программа может алгоритмически проверить, чтобы определить, является ли она действительным ключом или нет. В этом случае кто-то еще может найти установленный ключ и повторно использовать его где-то в другом месте, но это похоже на то, что первый человек передал ключ другому пользователю.

+0

Я больше беспокоюсь о том, чтобы люди делились ключами, а не декомпилировали и реконструировали мой алгоритм. Поэтому, помимо хранения ключей в онлайн-базе данных и их удаления после использования, какие у меня варианты. Я думал, хотя это звучит странно, чтобы моя банка удалила все алфавиты из введенного ключа, а затем разделила оставшийся двойной на текущий день месяца, а затем на текущий месяц.Если это приводит к целому числу, бот активируется, но если он не является целым числом, ключ недействителен. Таким образом, каждый ключ будет работать только один день в году. Пользователям будет активирован 1 день. –

+0

не очень удобный, имея только один день. что, если пользователь должен выполнить новую установку своего компьютера? также, как насчет часовых поясов? срок действия может быть намного короче в другом часовом поясе. Я бы сохранил исходный ключ и каждый раз проверял его, вместо того, чтобы хранить только флаг, если он был проверен один раз. но для этого нужен другой ключевой формат. – cello

0

Если вам действительно нужна безопасность, вам придется больше работать при запутывании, чем любой потенциальный злоумышленник будет работать при обратном проектировании. Посмотрите на реализацию успешного DRM, если вы хотите знать, как реализовать безопасность на уровне кода. Обычно они включают несколько неочевидных проверок в коде с некоторым сервером, который проверяет ключ.

Альтернатива, которую я предпочитаю, заключается в том, чтобы пользователь согласился с некоторыми законными лицами, которые ограничивают их использование.