【问题标题】:SHA256 in T-sql stored procedureT-sql 存储过程中的 SHA256
【发布时间】:2011-02-26 15:23:26
【问题描述】:

是否可以从 Sql Server 2008 中的存储过程生成字符串的 SHA-256 哈希?

出于部署原因,我更喜欢在 TSQL 中使用它。

【问题讨论】:

    标签: sql-server-2008 sha256


    【解决方案1】:

    更新:SQL Server 2012 HASHBYTES() 现在支持开箱即用的 SHA-256 和 SHA-512。

    HASHBYTES ( '<algorithm>', { @input | 'input' } )
    
    <algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512
    

    当然。您可以在 TSQL 中执行此操作,但将其实现为 CLR Stored procedure 会容易得多。

    这是一个实际示例,它仅使用 .NET Framework 类型:Let's Hash a BLOB

    【讨论】:

    【解决方案2】:

    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)
    

    【讨论】:

    • 在哪里可以找到那个 DLL?
    • 我没有意识到您可以通过 SQL Server 如此轻松地调用 .dll。您也可以将自己的 SHA-256 散列方法放入 class/.dll 并通过 SQL 调用它。很酷,谢谢你的回答。
    【解决方案3】:

    它必须是 SHA-256。有一个SQLHASHBYTES()函数可以做SHA、SHA1、MD5等。

    (当然,这取决于您是想要一个值的哈希表示,还是安全地存储有价值的数据。)

    【讨论】:

    • 添加以防万一(像我一样)我在 SQL Server 中搜索任何本机 HASH 函数并且他们遇到了这个问题。这意味着 CLR 是提供 HASH 函数的唯一方法。
    猜你喜欢
    • 2018-10-03
    • 2013-05-28
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多