MYSQL SHA2 512具有多个转换

MYSQL SHA2 512具有多个转换,mysql,sha2,Mysql,Sha2,我必须计算SHA2512校验和,但也有“转换次数”的要求。我找不到任何答案。有人能帮我使用MYSQL/MSSQL吗?有可能使用这些语言吗 编辑:转换次数:5000 SELECT (SHA2( '20191018143572123034102012221314181237774212' , 512)); 收到: 371a4fbf2b393338d0a6c619ec18fe5f636fdc1992c09763acfd5dae0bb97b13359fb091e4a196ba085d1a60a3127

我必须计算SHA2512校验和,但也有“转换次数”的要求。我找不到任何答案。有人能帮我使用MYSQL/MSSQL吗?有可能使用这些语言吗

编辑:转换次数:5000

SELECT (SHA2( '20191018143572123034102012221314181237774212' , 512));
收到: 371a4fbf2b393338d0a6c619ec18fe5f636fdc1992c09763acfd5dae0bb97b13359fb091e4a196ba085d1a60a312733d6a384e937e32c9aef7063c7911d46b84

期望值:
F8B915776EAB735FDD10266B2E6068447904852B82C30EEB6DE30703A087EB17EA4C4A37630494607194DDB9354C1211BD984FB5F4D9CFF95F5A24ED52065E7用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';
对于5000行集合中的每一行,将变量设置为自身的哈希值

mysql> select @value := sha2(@value, 512) from n limit 5000;
该查询的最后一行将是散列5000次的结果。您还可以查询变量的当前值:

mysql> select @value;
+----------------------------------------------------------------------------------------------------------------------------------+
| @value                                                                                                                           |
+----------------------------------------------------------------------------------------------------------------------------------+
| f8b915776eab735fdd10266b2e66068447904852b82c30eeb6de30703a087eb17ea4c4a37630494607194ddb9354c1211bd984fb5f4d9cff95f5a24ed52065e7 |
+----------------------------------------------------------------------------------------------------------------------------------+
坦率地说,这在除SQL之外的任何其他编程语言中都更容易实现

你应该使用一个循环

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


如果您想增加一点延迟,也可以在应用程序中使用
选择睡眠(1)
或等效功能。

用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';
对于5000行集合中的每一行,将变量设置为自身的哈希值

mysql> select @value := sha2(@value, 512) from n limit 5000;
该查询的最后一行将是散列5000次的结果。您还可以查询变量的当前值:

mysql> select @value;
+----------------------------------------------------------------------------------------------------------------------------------+
| @value                                                                                                                           |
+----------------------------------------------------------------------------------------------------------------------------------+
| f8b915776eab735fdd10266b2e66068447904852b82c30eeb6de30703a087eb17ea4c4a37630494607194ddb9354c1211bd984fb5f4d9cff95f5a24ed52065e7 |
+----------------------------------------------------------------------------------------------------------------------------------+
坦率地说,这在除SQL之外的任何其他编程语言中都更容易实现

你应该使用一个循环

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


您也可以使用
选择睡眠(1)
或应用程序中的等效函数,如果您想添加一个小延迟。

您的需求准确地说明了什么?只有一个要求:转换次数:5000他们可能希望您将哈希值散列5000次。您的需求准确地说明了什么?只有一个要求:转换次数:5000他们可能希望您将散列-5000次。