Прежде чем кто-либо прочтет это, решит последовать этому совету и использовать его SHA-*для хэширования паролей, ПОЖАЛУЙСТА, сначала прочтите это .
c00000fd
2
Если вы не используете SHA-256 для паролей, чего не следует делать, хеш-коды имеют длину 256 бит, или 64 шестнадцатеричных символа, или 43 буквенно-цифровых символа, или 32 байта.
каркать
Ответы:
337
Sha256 имеет длину 256 бит - как видно из его названия.
Поскольку sha256 возвращает шестнадцатеричное представление, для кодирования каждого символа достаточно 4 бит (вместо 8, как для ASCII), поэтому 256 бит будут представлять 64 шестнадцатеричных символа, поэтому вам нужна буква a varchar(64)или даже a char(64), поскольку длина всегда одинакова , не меняясь вообще.
Можем ли мы использовать char (64) в качестве первичного ключа или двоичный (32) будет лучше для этого? (access_token)
французски
3
Если вы думаете, что можете заблокировать пользователя в будущем, тогда я предлагаю использовать varchar(65)в качестве ведущего !... просто сказать.
Манатакс
105
... или просто добавить столбец "заблокирован"?
Стейн де Витт
5
Поскольку вы хотите иметь различную соль для каждого пароля, вы должны хранить это рядом с хешем. Для этого вы можете использовать дополнительное поле или предварительно / добавить его в хеш, так что вам понадобится более 64 символов
Патрик Корнелиссен,
4
Вы можете использовать этот оператор select для проверки: SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))всегда равно 44 независимо от длины исходной строки.
DrAhmedJava
72
Варианты кодирования для 256-битного SHA256:
Base64: 6 бит на символ = CHAR(44)включая символ заполнения
Base64 составляет 3 байта на 4 символа, поэтому, несмотря на то, что 32 байта умещаются в 43 символа, вам действительно нужно 44. В качестве последнего символа добавляется дополнительный =
Wilco
2
Ну, =можно удалить и снова добавить.
Рик Джеймс
28
Я предпочитаю использовать BINARY (32), так как это оптимизированный способ!
Вы можете поместить в эти 32 шестнадцатеричные цифры от (00 до FF).
+1 - мне нравится оптимизировано ... всем, кто сталкивается с этим ... использовать это с MySQL ... вы можете использовать UPDATE...SET hash_column=UNHEX(sha256HexString). Затем, когда вы получите его, вы SELECT HEX(hash_column) AS hash_column.
Кевин Нельсон
22
Зачем ты сделал это VARCHAR? Это не меняется. Это всегда 64 символа, что можно определить, запустив что-нибудь в один из онлайн-калькуляторов SHA-256 .
является ли char (64) допустимым оператором mysql?
Тони Старк
28
@hatorade: Нет, это не утверждение, а допустимый тип столбца.
Марк Байерс
10
varchar также не выделяет место, если только он не используется, в отличие от char, он выделяет количество разрешенных символов, независимо от того, есть ли данные, заполняющие его.
Xenland
6
Будет исправлено 64 символа, поэтому используйте char(64)
SHA-*
для хэширования паролей, ПОЖАЛУЙСТА, сначала прочтите это .Ответы:
Sha256 имеет длину 256 бит - как видно из его названия.
Поскольку sha256 возвращает шестнадцатеричное представление, для кодирования каждого символа достаточно 4 бит (вместо 8, как для ASCII), поэтому 256 бит будут представлять 64 шестнадцатеричных символа, поэтому вам нужна буква a
varchar(64)
или даже achar(64)
, поскольку длина всегда одинакова , не меняясь вообще.И демо:
Дам тебе :
т.е. строка из 64 символов.
источник
varchar(65)
в качестве ведущего!
... просто сказать.SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))
всегда равно 44 независимо от длины исходной строки.Варианты кодирования для 256-битного SHA256:
CHAR(44)
включая символ заполненияCHAR(64)
BINARY(32)
источник
=
можно удалить и снова добавить.Я предпочитаю использовать BINARY (32), так как это оптимизированный способ!
Вы можете поместить в эти 32 шестнадцатеричные цифры от (00 до FF).
Поэтому БИНАРНЫЙ (32)!
источник
UPDATE...SET hash_column=UNHEX(sha256HexString)
. Затем, когда вы получите его, выSELECT HEX(hash_column) AS hash_column
.Зачем ты сделал это VARCHAR? Это не меняется. Это всегда 64 символа, что можно определить, запустив что-нибудь в один из онлайн-калькуляторов SHA-256 .
источник
Будет исправлено 64 символа, поэтому используйте
char(64)
источник
CHARACTER SET ascii
.