В общем, вы могли бы выполнить простую операцию, которая отражает саму природу Int32, заполнить все доступные биты единицами - это то, что вы можете легко сохранить в своей памяти. Он работает в основном одинаково в большинстве языков, но я собираюсь использовать Python для примера:
max = 0
bits = [1] * 31 # Generate a "bit array" filled with 1's
for bit in bits:
max = (max << 1) | bit
# max is now 2147483647
Для неподписанных Int32, сделайте его 32 вместо 31 1.
Но так как опубликовано еще несколько авантюрных подходов, я начал думать о формулах, просто для удовольствия ...
Формула 1 (Числа объединяются, если оператор не указан)
Python quickcheck
a = 4
b = 8
ab = int('%d%d' % (a, b))
ba = int('%d%d' % (b, a))
'%d%d%d%d%d' % (ba/a, ab-1, ab, ab-a-b, ab-1)
# gives '2147483647'
Формула 2
Быстрый контроль Python
x = 48
'%d%d%d%d%d' % (x/2-3, x-1, x, x*3/4, x-1)
# gives '2147483647'
Это довольно стандартно - руководство подойдет для соли. Дело в том, чтобы предотвратить атаки Rainbow , и практически любое значение, которое является случайным (или даже если не случайным, то, по крайней мере, различным) для каждого пользователя, подойдет.
Если безопасность является основной проблемой, я бы предпочел НЕ использовать GUID для значения соли.
GUID бывают разных «типов», некоторые из них имеют больше «случайным», чем другие. Однако даже лучший тип GUID (это был бы GUID типа V4 с точки зрения «случайности») не действительно подходящие для криптографических функций.
Из статьи Википедии о GUID :
GUID V4 используют более поздний алгоритм, что является псевдослучайным числом. Эти иметь "4" в той же позиции, для пример {38a52be4-9352-453e-af97-5c3b448652f0}. В частности, бит data3 шаблон будет 0001xxxxxxxxxxxx в первый случай и 0100xxxxxxxxxxxx В секунду. Криптоанализ Генератор WinAPI GUID показывает, что, поскольку последовательность GUID V4 псевдослучайно, учитывая начальное состояние можно предсказать до следующих 250 000 GUID, возвращаемые функцией UuidCreate. Вот почему GUID не должны использоваться в криптографии, например. g., как случайные ключи.
Как заметил Крейг Стунц, вы не должны пытаться делать криптовалюту самостоятельно. Определение соли здесь . Как говорится, это должно быть случайным, и ваш GUID не может быть случайным, и поэтому у вас может быть утечка информации и снижение безопасности. При этом это зависит от того, какой уровень безопасности вы хотите для своей системы. Если это небольшое приложение, возможно, вам удастся обойтись с вашей текущей системой.
Как описать, непонятно, как работает этот механизм - я предполагаю, что поле userid
содержит сгенерированный GUID (иначе я не понимаю, как вы получаете его для сравнения).
Существуют разные типы GUID , не все они случайны. Но тогда случайность на самом деле не требуется для добавления пароля. В целом, ваш подход выглядит нормально, хотя вы можете рассмотреть возможность многократного хеширования ( «усиление ключа» ) для дальнейшего повышения безопасности.
Зачем вы заново изобретаете логин, если не понимаете одноразовых номеров ?
Обновление основано на новых деталях вопроса из комментариев. Для приложения Windows GUI, взаимодействующего с SQL Server, мой выбор аутентификации будет начинаться с: