17

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

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

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

谢谢

4

5 回答 5

27

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

SQL Server 2008 R2 及更低版本不支持 SHA2_512。这是MSDN 上的 HASHBYTES

于 2012-04-11T22:25:31.997 回答
2

这里有一个 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
于 2017-12-13T15:31:47.620 回答
1

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

于 2015-09-11T19:03:50.560 回答
1
SELECT HASHBYTES('SHA2_256','test')  
SELECT HASHBYTES('SHA2_512','test')  
于 2017-10-28T13:21:34.680 回答
1

如果您在 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

于 2018-10-11T20:32:44.723 回答