MYSQL SHA2 512 с несколькими преобразованиями - PullRequest
0 голосов
/ 21 января 2020

Мне нужно подсчитать контрольную сумму SHA2 512, но есть также требование «количество преобразований». Я не могу найти ответ. Кто-нибудь может мне помочь, используя MYSQL / MS SQL? Можно ли вообще использовать эти языки

1002 * EDIT: число преобразований: 5000
SELECT (SHA2( '20191018143572123034102012221314181237774212' , 512));

ПОЛУЧАЛ: 371a4fbf2b393338d0a6c619ec18fe5f636fdc1992c09763acfd5dae0bb97b13359fb091e4a196ba085d1a60a312733d6a384e937e32c9aef7063c7911d46b84

1011 * Ожидается: f8b915776eab735fdd10266b2e66068447904852b82c30eeb6de30703a087eb17ea4c4a37630494607194ddb9354c1211bd984fb5f4d9cff5f5a7

1 Ответ

2 голосов
/ 21 января 2020

Заполните таблицу 5000 или более строк.

mysql> create table n ( n smallint unsigned auto_increment primary key);
mysql> insert into n (n) select null;
mysql> insert into n (n) select null from n;
... repeat doubling the rows in the table until you have more than 5000 rows ...

Установите переменную сеанса в вашей исходной строке.

mysql> set @value = '20191018143572123034102012221314181237774212';

Установите переменную в ха sh самой себя для каждой строки в наборе из 5000 строк.

mysql> select @value := sha2(@value, 512) from n limit 5000;

Последняя строка этого запроса будет результатом хеширования 5000 раз. Вы также можете запросить текущее значение переменной:

mysql> select @value;
+----------------------------------------------------------------------------------------------------------------------------------+
| @value                                                                                                                           |
+----------------------------------------------------------------------------------------------------------------------------------+
| f8b915776eab735fdd10266b2e66068447904852b82c30eeb6de30703a087eb17ea4c4a37630494607194ddb9354c1211bd984fb5f4d9cff95f5a24ed52065e7 |
+----------------------------------------------------------------------------------------------------------------------------------+

Честно говоря, это легче практически на любом другом языке программирования, кроме SQL.

Вы должны просто использовать al oop.

Возможно, вы захотите использовать другой метод хеширования, который использует растяжение ключа вместо того, чтобы полагаться на 5000 повторений SHA2. Как правило, повторное повторное хеширование выполняется много раз, чтобы вычисление занимало больше времени, чтобы злоумышленники были менее привлекательны для попыток автоматического определения паролей.

Вы также можете просто использовать SELECT SLEEP(1) или эквивалентную функцию в своем приложении, если хотите добавить небольшую задержку.

...