Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2008 R2哈希字节SHA2返回null_Sql_Sql Server 2008_Hash - Fatal编程技术网

SQL Server 2008 R2哈希字节SHA2返回null

SQL Server 2008 R2哈希字节SHA2返回null,sql,sql-server-2008,hash,Sql,Sql Server 2008,Hash,我试图使用HASHBYTES和SHA2_512作为算法。但是,当我尝试在SQLServerManagementStudio中执行此操作时,得到的结果是空的 SELECT HASHBYTES('SHA1','test') //works SELECT HASHBYTES('SHA2','test') //returns null 我做错了什么? 有没有办法查看SELECT HASHBYTES'SHA2','test'中的返回值 感谢SQL Server在SQL Server 2012+中支持SH

我试图使用HASHBYTES和SHA2_512作为算法。但是,当我尝试在SQLServerManagementStudio中执行此操作时,得到的结果是空的

SELECT HASHBYTES('SHA1','test') //works
SELECT HASHBYTES('SHA2','test') //returns null
我做错了什么? 有没有办法查看SELECT HASHBYTES'SHA2','test'中的返回值


感谢

SQL Server在SQL Server 2012+中支持SHA2 512


SQL Server 2008 R2及以下版本不支持SHA2_512。这是一个128、256和512位的小例子

DECLARE @HashThis nvarchar(4000);
SELECT @HashThis = CONVERT(nvarchar(4000),'This is a sample string');
SELECT HASHBYTES('SHA1', @HashThis);
SELECT HASHBYTES('SHA2_256', @HashThis);
SELECT HASHBYTES('SHA2_512', @HashThis);
GO
如果在CLR中使用用户定义的函数UDF,则可以在SQL Server 2008中返回SHA512哈希。下面是相关的部分,不包括如何在SQLServer中执行CLR的完整说明

首先,C CLR代码:

使用系统文本; 使用System.Data.SqlTypes; 使用Microsoft.SqlServer.Server; 使用System.Security.Cryptography; 公共部分类UserDefinedFunctions { [Microsoft.SqlServer.Server.SqlFunctionDataAccess=DataAccessKind.Read] [返回:SqlFacetMaxSize=-1] 公共静态SqlString哈希_string_sha512[SqlFaceMaxSize=-1]字符串值 { SHA512Managed crypt=新的SHA512Managed; string hashString=string.Empty; byte[]crypto=crypt.ComputeHashEncoding.UTF8.GetBytesValue,0,Encoding.UTF8.GetByteCountValue; 加密中的foreach字节位 { hashString+=位ToStringx2; } 返回哈希字符串; } }; 构建CLR项目,该项目将创建DLL。现在在数据库中为DLL创建程序集,并注册函数:

从“[PATH]\[DLL\u Name].DLL”创建程序集MyCode,权限设置为外部访问 创建函数hash\u字符串_sha512@valnvarcharmax返回nvarcharmax作为外部名称MyCode.UserDefinedFunctions.hash\u string\u sha512 现在您可以散列任何字符串:

选择dbo.hash\u string\u sha512'作为sha512哈希,它看起来像什么 返回散列:

42F8373D528CB64CDFA7EC4FFB2D754C7D4C37A28959506EC2413ACFE17500DB7940FFD887390CB543A8615A6000B4F6BCDB199BB56AF91BEC84780F236AAF8


哎呀,谢谢你指出这一点。我没有看到MSDN页面顶部的版本信息。这应该是正确的答案。这是因为sql版本。
DECLARE @HashThis nvarchar(4000);
SELECT @HashThis = CONVERT(nvarchar(4000),'This is a sample string');
SELECT HASHBYTES('SHA1', @HashThis);
SELECT HASHBYTES('SHA2_256', @HashThis);
SELECT HASHBYTES('SHA2_512', @HashThis);
GO