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;
}
};
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