Вопрос должен быть, "сколько предположения необходимы в среднем для нахождения действительного PIN-кода, по сравнению с тем, сколько делают взломщики предположений?"
при генерации 100 000 5-разрядных кодов, тогда очевидно, требуется 1 предположение. Это вряд ли будет достаточно хорошо.
при генерации 100 000 N-разрядных кодов, тогда это берет (n-5) ^10 предположения. Чтобы удаться, достаточно хорошо ли это, необходимо рассмотреть, как система отвечает на неправильное предположение.
, Если взломщик (или, все объединенные взломщики) может высказать 1 000 предположений в секунду, то ясно n должен быть довольно большим для остановки решительного взломщика. При постоянной блокировке их IP-адреса после 3 неправильных предположений то, так как у данного взломщика вряд ли будет доступ к больше, чем, скажем, 1000 IP-адресов, n=9 были бы достаточны для срыва почти всех взломщиков. Очевидно, при направлении с распределенными нападениями или нападениями из ботнета тогда 1 000 IP-адресов на взломщика больше не являются безопасным предположением.
, Если в будущем необходимо выпустить дальнейшие коды (больше чем 100 000), тогда очевидно, Вы облегчаете предполагать допустимый код. Таким образом, вероятно, стоит провести некоторое время, теперь удостоверяясь в Ваших будущих потребностях масштабирования прежде, чем закрепить на размере.
, Учитывая Ваш вариант использования карты царапины, если бы пользователи собираются использовать систему в течение долгого времени, я рекомендовал бы позволить им (или вынудить их) для "обновления" их PIN-кода до имени пользователя и пароля их выбора после первого использования системы. Тогда Вы получаете обычные преимущества имени пользователя/пароля, не отбрасывая простоту первого использования просто ввода числа от карты.
Что касается того, как генерировать число - по-видимому, каждый, который Вы генерируете, Вы сохраните, в этом случае я сказал бы, генерируют их случайным образом и удаляют дубликаты. Если Вы генерируете их использующий какой-либо вид алгоритма, и кто-то выясняет алгоритм, то они могут выяснить действительные PIN-коды. При выборе алгоритма, таким образом, что для кого-то не возможно выяснить алгоритм, то это [почти 110] генератор псевдослучайного числа (другое свойство PRNGs, являющегося этим, они равномерно распределяются, который помогает здесь также, так как это делает его тяжелее для предположения кодов), в этом случае Вы могли бы также просто генерировать их случайным образом.
Зарегистрируйте выходной параметр для хранимой процедуры и установите значение на основе @@ ROWCOUNT
при использовании SQL Server. Используйте SQL% ROWCOUNT
, если вы используете Oracle.
Помните, что если у вас есть несколько INSERT / UPDATE / DELETE
, вам понадобится переменная для сохранения результата из ] @@ ROWCOUNT
для каждой операции.
@@ RowCount
даст вам количество записей, затронутых оператором SQL.
@@ RowCount
работает только в том случае, если вы запускаете его сразу после этого. Поэтому, если вы улавливаете ошибки, вы должны делать это в той же строке. Если вы разделите его, вы пропустите тот, который вы поставили вторым.
SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR
Если у вас несколько операторов, вам придется захватить количество затронутых строк для каждого и сложить их.
SELECT @NumRowsChanged = @NumRowsChanged + @@ROWCOUNT, @ErrorCode = @@ERROR
Для Microsoft SQL Server вы можете вернуть переменную @@ ROWCOUNT
, чтобы вернуть количество строк, затронутых последним оператором в хранимой процедуре.