Скільки часу хеш SHA256?


247

Я буду запускати SHA256пароль + сіль, але я не знаю, як довго заробляти VARCHARпід час налаштування бази даних MySQL. Що таке хороша довжина?


9
Перш ніж хтось, хто читає це, вирішив дотримуватися цієї поради та використати SHA-*хеш-паролі, ПРОСУЖДАЙТЕ це спочатку прочитати .
— c00000fd

2
Якщо ви не використовуєте SHA-256 для паролів, чого ви не повинні робити, хеші мають довжину 256 біт, або 64 шістнадцяткових символів, або 43 буквено-цифрових символів або 32 байти.
— каркати

Відповіді:


335

Sha256 - це 256 біт, як вказує його назва.

Оскільки sha256 повертає шістнадцяткове представлення, для кодування кожного символу достатньо 4 бітів (замість 8, як для ASCII), тож 256 бітів представлятимуть 64 шістнадцяткових символів, тому вам потрібен а varchar(64), або навіть a char(64), оскільки довжина завжди однакова , зовсім не змінюючись.

І демонстрація:

$hash = hash('sha256', 'hello, world!');
var_dump($hash);

Дасть вам:

$ php temp.php
string(64) "68e656b251e67e8358bef8483ab0d51c6619f3e7a1a9f0e75838d41ff368f728"

тобто рядок із 64 символами.


7
чи можемо ми використовувати char (64) в якості основного ключа чи буде двійковим (32) для цього краще? (access_token)
— франкіз

3
Якщо ви думаєте, що ви, можливо, захочете заблокувати користувача в майбутньому, то пропоную використовувати varchar(65)для ведучого !... просто кажу.
— Манатакс

103
... або просто додати стовпець "заблокований"?
— Штійн де Вітт

5
Оскільки ви хочете мати різні солі для кожного пароля, ви повинні зберігати його поруч із хешем. Для цього ви можете скористатись додатковим полем або попередньо / додати його до хешу, тому вам знадобиться більше 64 знаків
— Патрік Корнеліссен

4
Ви можете використовувати цей оператор select, щоб перевірити його:, SELECT length(to_base64(unhex(sha2('say hello to my little friend',256))))це завжди 44 незалежно від довжини початкового рядка.
— DrAhmedJava

72

Параметри кодування 256-ти біт SHA256:

  1. Base64: 6 біт на char = CHAR(44)включаючи символи прокладки
  2. Шестнадцятковий: 4 біта на char = CHAR(64)
  3. Двійковий: 8 біт на байт = BINARY(32)

30
Base64 - 3 байти на 4 символи, тому, хоча 32 байти вміщуються в 43 символи, вам фактично потрібно 44. Додатковий = додається як кінцевий символ
— Wilco

2
Ну, =баночку можна зняти і знову додати.
— Рік Джеймс

28

Я вважаю за краще використовувати BINARY (32), оскільки це оптимізований спосіб!

Ви можете розмістити в цих 32 шістнадцяткових цифрах від (00 до FF).

Тому БІНАР (32)!


8
+1 - Мені подобається оптимізовано ... для всіх, хто трапляється на цьому ... використовувати це з MySQL ... ви можете використовувати UPDATE...SET hash_column=UNHEX(sha256HexString). Потім, отримуючи його, ви SELECT HEX(hash_column) AS hash_column.
— Кевін Нельсон

22

Навіщо зробити це ВАРЧАР? Він не змінюється. Це завжди 64 символи, які можна визначити, запустивши що-небудь в один з онлайн-калькуляторів SHA-256 .


чи char (64) є дійсним твердженням mysql?
— Тоні Старк

28
@hatorade: Ні, це не твердження, але це допустимий тип стовпця.
— Марк Байєрс

10
varchar також не виділяє простір, якщо не використовується, на відміну від char він виділяє кількість загальних символів, дозволених незалежно від наявності даних, що заповнюють його.
— Xenland

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.