Криптография.NET для ключей лицензии?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

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

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

14
задан Community 23 May 2017 в 12:24
поделиться

6 ответов

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

10
ответ дан 1 December 2019 в 12:40
поделиться

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

, Если бы Вы делаете серверную сторону проверки, я выбрал бы SHA 256 базирующийся HMAC.

7
ответ дан 1 December 2019 в 12:40
поделиться

Ответы на Ваш другой вопрос являются соответствующими здесь, также: , Какой встроенный алгоритм криптографии.NET является самым безопасным?

1
ответ дан 1 December 2019 в 12:40
поделиться

Если требуется видеть пример Тройного шифрования DES, можно смотреть на мое сообщение в блоге при шифровании данных в базе данных.

сообщение в блоге содержит видео и исходный код.

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

исходный код записан в C# и использует Тройные алгоритмы DES.

0
ответ дан 1 December 2019 в 12:40
поделиться

Вам нужно сделать 4 вещи:
No 1: Проверьте контрольную сумму вашего приложения (MD5, с пользовательским md5 контекстом)
- MD5 контекст должен быть шифрованно инициализирован
- Сравните с зашифрованной контрольной суммой с закрытым/открытым ключом
No 2: Контрольная сумма текстового сегмента запущенного приложения
No 3: Используйте 4096-битное RSA шифрование закрытым/публичным ключом для лицензии
No 4: Шифруйте любые важные строки, такие как "Неверный ключ" или "Ключ в порядке"

1
ответ дан 1 December 2019 в 12:40
поделиться

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

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

Основные функции CryptoAPI для подписи и проверки - это CryptSignHash и CryptVerifySignature , см. Пример программы C: подписание хэша и проверка подписи хэша .

Эквивалентом .Net Framework являются классы RSAPKCS1SignatureFormatter и RSAPKCS1SignatureDeformatter .

3
ответ дан 1 December 2019 в 12:40
поделиться
Другие вопросы по тегам:

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