MYSQL 具有多重转换的 SHA2 512

MYSQL SHA2 512 with multiple transformations

我要算SHA2 512 checksum,但也有"number of transformations"的要求。我找不到任何答案。任何人都可以帮助我使用 MYSQL/MSSQL 吗?是否可以使用这些语言?

编辑:转换次数:5000

SELECT (SHA2( '20191018143572123034102012221314181237774212' , 512));

收到: 371a4fbf2b393338d0a6c619ec18fe5f636fdc1992c09763acfd5dae0bb97b13359fb091e4a196ba085d1a60a312733d6a384e937e32c9aef7063c7911d46b]84[=12]

预期: f8b915776eab735fdd10266b2e66068447904852b82c30eeb6de30703a087eb17ea4c4a37630494607194ddb9354c1211bd984fb5f4d9cff95f5a24ed52065e7

用 5000 行或更多行填充 table。

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';

将变量设置为 5000 行集中每一行的自身散列。

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

该查询的最后一行将是散列 5000 次的结果。也可以查询变量的当前值:

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

坦率地说,这在除 SQL 之外的几乎任何其他编程语言中都更容易。

你应该只使用一个循环。

您可能还想使用一种不同的哈希方法,该方法使用密钥拉伸而不是依赖 SHA2 的 5000 次重复。通常,多次重复重新散列是为了使计算时间更长,从而降低攻击者尝试自动密码猜测器的吸引力。

如果您想添加一个小的延迟,您也可以只使用 SELECT SLEEP(1) 或应用中的等效函数。