Я хочу знать, достаточно ли BigInt по размеру. Я создал registration.php, где пользователь получает по электронной почте ссылку активации учетной записи, чтобы проверить его электронную почту, чтобы активировать его учетную запись.
Ссылка активации учетной записи в этом формате:
[PHP]
$account_activation_link =
"http://www.".$site_domain."/".$social_network_name."/activate_account.php?primary_website_email=".$primary_website_email."&account_activation_code=".$account_activation_code."";
[/PHP]
Код активации учетной записи находится в таком формате:
$ account_activation_code = sha1 ((строка) mt_rand (5, 30)); //Type. Перетащите INT в STRING по 1-му параметру sha1, поскольку он должен быть STRING.
Теперь следующая ссылка была отправлена по электронной почте: http://www.myssite.com/folder/[email protected]&account_activation_code=22d200f8670dbdb3e253a90eee5098477c95c23d
Обратите внимание, что код активации учетной записи, полученный с помощью sha1: 22d200f8670dbdb3e253a90eee5098477c95c23d
Но в моем mysql db, в столбце "account_activation_code", я вижу только: "22". Остальная часть кода активации отсутствует. Это почему? Столбец установлен в BigInt. Разве этого недостаточно для размещения кода Sha1? Что вы предлагаете?
Благодарю вас
Методы хэширования, такие как SHA-1, производят двоичные значения, которые имеют длину 160+ бит в зависимости от используемого варианта. Общий SHA256 один имеет длину 256 бит. Криптографический хэш не будет вписываться в 64-битное поле BIGINT, потому что 64-битные хэши бесполезно малы, у вас не будет ничего, кроме столкновений.
Обычно люди хранят хеши в виде их шестнадцатеричных эквивалентов в столбце VARCHAR(255)
. Они могут быть проиндексированы и достаточно хорошо выполняются в большинстве ситуаций, особенно в тех случаях, когда вы периодически выполняете поиск на основе кликов. С точки зрения производительности и хранения здесь нет проблем.
Короткий ответ: BIGINT
слишком мал.
Хэш - это в основном поток бит (160 бит в случае SHA-1). Хотя это, безусловно, возможно сделать эти биты в качестве базового 2-го числа и преобразовать его в базу 10, для этого вам понадобится действительно большое хранилище (насколько я знаю, это не так, чтобы видеть целочисленные переменные размером более 64 бит), и там aren Очевидные преимущества. BIGINT - это 64-разрядный тип, поэтому он не может выполнять эту работу.
Если у вас нет веских оснований хранить его как число, я бы просто использовал двоичный тип столбца или его шестнадцатеричное представление простого текста в добром старом VARCHAR
(последний, как правило, более практичен для обработки).
Вы пытаетесь сохранить строку в BigInt. Это ваша проблема. SHA-хеши - это сочетание буквенно-цифровых символов, а не только чисел. Измените поле на VARCHAR, и все будет в порядке