是否可以从 Sql Server 2008 中的存储过程生成字符串的 SHA-256 哈希?
出于部署原因,我更喜欢在 TSQL 中使用它。
更新:SQL Server 2012 HASHBYTES()现在支持 SHA-256 和 SHA-512 开箱即用。
HASHBYTES ( '<algorithm>', { @input | 'input' } ) <algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512
当然。您可以在 TSQL 中执行此操作,但将其实现为CLR 存储过程会容易得多。
这是一个实际示例,它仅使用 .NET Framework 类型:让我们散列一个 BLOB
SQL SERVER 2008 或 SQL SERVER 2005 中的 SHA256、SHA512!
如果您使用 fnEnCryptSHA.dll,您可以这样做!
USE [master] GO
EXEC sp_configure 'clr enabled', 1 GO RECONFIGURE GO
CREATE ASSEMBLY InnoDll FROM 'C:\sqltip\fnEnCryptSHA.dll' WITH PERMISSION_SET= SAFE GO
CREATE FUNCTION dbo.fnGetStringToSha256 (@Str nvarchar(1000)) RETURNS varbinary(8000) AS EXTERNAL NAME InnoDll.fnEnCryptSHA.GetStringToSha256 GO
CREATE FUNCTION dbo.fnGetBinaryToSha256 (@Str varbinary(8000)) RETURNS varbinary(8000) AS EXTERNAL NAME InnoDll.fnEnCryptSHA.GetBinaryToSha256 GO
SELECT dbo.fnGetStringToSha256('abc')
SELECT dbo.fnGetBinaryToSha256(0x9F04F41A848514162050E3D68C1A7ABB441DC2B5)
它必须是 SHA-256。有一个 SQLHASHBYTES()
函数可以做 SHA、SHA1、MD5 等。
(当然,这取决于您是只想要一个值的哈希表示,还是要安全地存储有价值的数据。)