17

アルゴリズムとして SHA2_512 で HASHBYTES を使用しようとしています。ただし、SQL Server Management Studio でそれを実行しようとすると、すべてが null になります。

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 に答える
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

CLR でユーザー定義関数 (UDF) を使用すると、SQL Server 2008 でハッシュを返すことができます。SHA512SQLServer で 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;
  }
};

DLL を作成する CLR プロジェクトをビルドします。ここで、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 に答える