如何在SQL SERVER 2016+中生成SHA-3(256)哈希

SQLJax

如何在SQL Server 2016中生成SHA-3(256)哈希?

HASHBYTES似乎仅上升到SHA-2(256)或SHA-2(512)。

Microsoft BOL内置于任何地方,不会给我带来温暖和模糊。

-- SHA2-256
DECLARE @HashThis nvarchar(32);  
SET @HashThis = CONVERT(nvarchar(32),'123456');  
SELECT HASHBYTES('SHA2_256', @HashThis);  

-- Output: 0xEC278A38901287B2771A13739520384D43E4B078F78AFFE702DEF108774CCE24

-- SHA3-256  (KECCAK)
DECLARE @HashThis nvarchar(32);  
SET @HashThis = CONVERT(nvarchar(32),'123456');  
SELECT HASHBYTES('SHA3_256', @HashThis);  

-- Output: NULL
vvvv4d

您可以通过SQL Server CLR集成实现SHA-3 256哈希

GitHub上有一个项目已经为您完成了大部分工作,您可以轻松地为其添加SHA3支持。

https://github.com/sedenardi/sql-hashing-clr

纯dotnet核心无法实现SHA3-256哈希。我建议您使用具有SHA3-256支持的BouncyCastle库(https://www.bouncycastle.org/csharp/index.html)。有一个nuget库程序包,它是BouncyCastle的包​​装,可以使SHA3-256哈希比较容易实现。https://www.nuget.org/packages/SHA3.Net/您需要使用此软件包并进行更新HashUtil.cs

先决条件:构建CLR .dll

using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Security.Cryptography;
-- include NugetPackage to help with SHA-3 hashing

public class HashUtil
{
    [SqlFunction(IsDeterministic = true)]
    public static SqlBinary GetHash(SqlString algorithm, SqlBytes src)
    {
        if (src.IsNull)
            return null;

        switch (algorithm.Value.ToUpperInvariant())
        {
            case "MD5":
                return new SqlBinary(MD5.Create().ComputeHash(src.Stream));
            case "SHA1":
                return new SqlBinary(SHA1.Create().ComputeHash(src.Stream));
            case "SHA2_256":
                    return new SqlBinary(SHA256.Create().ComputeHash(src.Stream));
            case "SHA2_512":
                    return new SqlBinary(SHA512.Create().ComputeHash(src.Stream));
            -- add SHA3-256
            default:
                throw new ArgumentException("HashType", "Unrecognized hashtype: " + algorithm.Value);
        }
    }
}
  1. 将CLR .dll部署到SQL Server

    作为参考,这里是有关如何部署CLR .dll的Microsoft文档。

    https://docs.microsoft.com/zh-cn/sql/relational-databases/clr-integration/deploying-clr-database-objects?view=sql-server-ver15

  2. 将功能部署到SQL Server

    CREATE FUNCTION dbo.GetHashHybrid(@algorithm NVARCHAR(4000),@input VARBINARY(MAX))
     RETURNS VARBINARY(8000) WITH SCHEMABINDING
     AS
     BEGIN
     RETURN ( 
         SELECT dbo.GetHash(@algorithm,@input)
     )
     END
    
  3. 呼叫dbo.GetHash

    DECLARE @INPUT VARCHAR(MAX);
    SELECT @INPUT = REPLICATE(CAST('test1' AS VARCHAR(MAX)),2000);
    SELECT dbo.GetHash('MD5',CONVERT(VARBINARY(MAX),@INPUT));
    

此示例显示了MD5散列,但演示了如何使用CLR创建散列功能的概念,当前SQL Server尚不支持这种功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在AngularJS中生成HMAC-SHA256?

来自分类Dev

如何在 JavaScript 中生成十六进制二进制数据的 sha256 哈希值?

来自分类Dev

如何在Appcelerator中生成base64编码的SHA-512哈希?

来自分类Dev

创建在 SQL Server 2016 中生成插入语句的查询

来自分类Dev

如何在SQL Server中生成随机数据

来自分类Dev

如何在旧版SQL Server中生成JSON结果?

来自分类Dev

如何使用ECDHE-RSA-AES128-GCM-SHA256密码在Openssl中生成PEM文件

来自分类Dev

如何在Java中使用哈希sha256生成哈希代码?

来自分类Dev

卸载SQL Server 2016

来自分类Dev

如何在Windows 7上安装SQL Server 2016

来自分类Dev

如何在 SQL Server 2016 中安装全文搜索?

来自分类Dev

如何在Node.js中验证Java生成的密码哈希(SHA-256)?

来自分类Dev

在python和javascript中生成SHA256哈希会导致不同的结果

来自分类Dev

是Management Studio 2016提供SQL Server 2016

来自分类Dev

为什么在SQL Server中生成的MD5哈希值不相等?

来自分类Dev

在Chrome扩展程序中生成已下载文件的md5 / sha1 / sha256哈希

来自分类Dev

在Chrome扩展程序中生成已下载文件的md5 / sha1 / sha256哈希

来自分类Dev

如何在Python中使用sha256哈希

来自分类Dev

如何在python中对变量进行sha256哈希

来自分类Dev

如何在flutter中使用sha256哈希密码?

来自分类Dev

在Codename One中生成SHA1哈希函数

来自分类Dev

在Go中生成crypt()sha512哈希

来自分类Dev

在Haskell中生成HMAC :: SHA256.hexdigest

来自分类Dev

如何从 SSMS 2016 (Microsoft SQL Server) 注销?

来自分类Dev

如何在SQL Server 2008中生成随机布尔值?

来自分类Dev

如何在SQL SERVER中生成X范围内的随机数

来自分类Dev

如何在SQL Server中生成附加到getdate()的随机时间戳?

来自分类Dev

如何在SQL SERVER 2005中生成查询,该查询给出类似Matrix的输出?

来自分类Dev

如何在SQL SERVER2008中生成100000个无重复随机数

Related 相关文章

  1. 1

    如何在AngularJS中生成HMAC-SHA256?

  2. 2

    如何在 JavaScript 中生成十六进制二进制数据的 sha256 哈希值?

  3. 3

    如何在Appcelerator中生成base64编码的SHA-512哈希?

  4. 4

    创建在 SQL Server 2016 中生成插入语句的查询

  5. 5

    如何在SQL Server中生成随机数据

  6. 6

    如何在旧版SQL Server中生成JSON结果?

  7. 7

    如何使用ECDHE-RSA-AES128-GCM-SHA256密码在Openssl中生成PEM文件

  8. 8

    如何在Java中使用哈希sha256生成哈希代码?

  9. 9

    卸载SQL Server 2016

  10. 10

    如何在Windows 7上安装SQL Server 2016

  11. 11

    如何在 SQL Server 2016 中安装全文搜索?

  12. 12

    如何在Node.js中验证Java生成的密码哈希(SHA-256)?

  13. 13

    在python和javascript中生成SHA256哈希会导致不同的结果

  14. 14

    是Management Studio 2016提供SQL Server 2016

  15. 15

    为什么在SQL Server中生成的MD5哈希值不相等?

  16. 16

    在Chrome扩展程序中生成已下载文件的md5 / sha1 / sha256哈希

  17. 17

    在Chrome扩展程序中生成已下载文件的md5 / sha1 / sha256哈希

  18. 18

    如何在Python中使用sha256哈希

  19. 19

    如何在python中对变量进行sha256哈希

  20. 20

    如何在flutter中使用sha256哈希密码?

  21. 21

    在Codename One中生成SHA1哈希函数

  22. 22

    在Go中生成crypt()sha512哈希

  23. 23

    在Haskell中生成HMAC :: SHA256.hexdigest

  24. 24

    如何从 SSMS 2016 (Microsoft SQL Server) 注销?

  25. 25

    如何在SQL Server 2008中生成随机布尔值?

  26. 26

    如何在SQL SERVER中生成X范围内的随机数

  27. 27

    如何在SQL Server中生成附加到getdate()的随机时间戳?

  28. 28

    如何在SQL SERVER 2005中生成查询,该查询给出类似Matrix的输出?

  29. 29

    如何在SQL SERVER2008中生成100000个无重复随机数

热门标签

归档