我正在尝试使用带有SHA2_512的HASHBYTES作为算法。但是,当我尝试在SQL Server Management Studio中执行此操作时,我获得的只是null。
SELECT HASHBYTES('SHA1','test') //works
SELECT HASHBYTES('SHA2','test') //returns null
我做错了什么?
有没有办法查看SELECT HASHBYTES('SHA2', 'test')
的返回值?
感谢
答案 0 :(得分:22)
SQL Server支持SQL Server 2012+中的SHA2 512。
SQL Server 2008 R2及更低版本不支持SHA2_512。这是HASHBYTES on MSDN。
答案 1 :(得分:1)
< algorithm> :: = MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 每https://msdn.microsoft.com/en-us/library/ms174415.aspx
答案 2 :(得分:1)
SELECT HASHBYTES('SHA2_256','test')
SELECT HASHBYTES('SHA2_512','test')
答案 3 :(得分:1)
这是一个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
答案 4 :(得分:0)
如果在CLR中使用用户定义的函数(UDF),则 可以在SQL Server 2008中返回SHA512
哈希。在不包括如何在SQLServer中执行CLR的完整说明的情况下,以下是相关部分。
首先,是C#CLR代码:
using System.Text;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Security.Cryptography;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
[return: SqlFacet(MaxSize = -1)]
public static SqlString hash_string_sha512([SqlFacet(MaxSize = -1)]string Value)
{
SHA512Managed crypt = new SHA512Managed();
string hashString = string.Empty;
byte[] crypto = crypt.ComputeHash(Encoding.UTF8.GetBytes(Value), 0, Encoding.UTF8.GetByteCount(Value));
foreach (byte bit in crypto)
{
hashString += bit.ToString("x2");
}
return hashString;
}
};
构建您的CLR项目,该项目将创建DLL。现在在数据库中为DLL创建一个程序集,并注册该函数:
create assembly MyCode from '[PATH]\[DLL_Name].dll' with permission_set = external_access
create function hash_string_sha512(@val nvarchar(max)) returns nvarchar(max) as external name MyCode.UserDefinedFunctions.hash_string_sha512
现在您可以哈希任何字符串:
select dbo.hash_string_sha512('What will this look like as a SHA512 hash?')
哪个返回哈希值:
42f8373d528cb64cdfa7ec4ffb2d754c7d4c37a28959506ec2413aacfe17500db7940ffd887390cb543a8615a6000b4f6bcbd199bb56af91bec84780f236aaf8