如何解决如何在SQL SERVER 2016+中生成SHA-3256哈希
如何在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
解决方法
您可以通过!hash.Contains(Helpers.GetRootUrl(externalUrl))
集成来实现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/。您需要使用此软件包并更新SQL Server CLR
前提:构建CLR .dll
HashUtil.cs
-
将CLR .dll部署到SQL Server
作为参考,这里是Microsoft有关如何部署CLR .dll的文档
-
将功能部署到SQL Server
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); } } }
-
致电dbo.GetHash
CREATE FUNCTION dbo.GetHashHybrid(@algorithm NVARCHAR(4000),@input VARBINARY(MAX)) RETURNS VARBINARY(8000) WITH SCHEMABINDING AS BEGIN RETURN ( SELECT dbo.GetHash(@algorithm,@input) ) END
此示例显示了MD5哈希,但是演示了如何使用CLR创建SQL Server当前不支持的哈希功能的概念。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。