SQL Server 2008 R2的HASHBYTES SHA2返回null(SQL Server

2019-09-16 11:36发布

我试图用HASHBYTES与SHA2_512的算法中。 然而,当我尝试这样做在SQL Server Management Studio中的一切,我得到的是空。

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

我究竟做错了什么?
有没有一种方法来查看从返回值SELECT HASHBYTES('SHA2', 'test')

谢谢

Answer 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


Answer 2:

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

SQL Server 2008 R2和下面不支持SHA2_512。 下面是MSDN上HASHBYTES 。



Answer 3:

<算法> :: = MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | 每SHA2_512 Https://msdn.microsoft.com/en-us/library/ms174415.aspx



Answer 4:

SELECT HASHBYTES('SHA2_256','test')  
SELECT HASHBYTES('SHA2_512','test')  


Answer 5:

可以返回一个SHA512如果您在使用CLR用户定义函数(UDF)在SQL Server 2008中的散列。 而不包括如何在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



文章来源: SQL Server 2008 R2 HASHBYTES SHA2 returns null