SQL Server 2008 R2 HASHBYTES SHA2返回null

时间:2012-04-11 22:19:57

标签: sql sql-server-2008 hash

我正在尝试使用带有SHA2_512的HASHBYTES作为算法。但是,当我尝试在SQL Server Management Studio中执行此操作时,我获得的只是null。

SELECT HASHBYTES('SHA1','test') //works
SELECT HASHBYTES('SHA2','test') //returns null

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

感谢

5 个答案:

答案 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