2010-06-02 19 views
10

Ist es möglich, einen SHA-256-Hash einer Zeichenfolge aus einer gespeicherten Prozedur in Sql Server 2008 zu generieren?SHA256 in T-SQL gespeicherte Prozedur

Aus Gründen der Bereitstellung würde ich es in TSQL bevorzugen.

Antwort

20

Update: SQL Server 2012 HASHBYTES() unterstützt jetzt SHA-256 und SHA-512 aus der Box.

HASHBYTES ('<algorithm>', { @input | 'input' }) 

<algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512 

Sicher. Sie können es in TSQL tun, aber es wird viel einfacher sein, es als CLR Stored procedure zu implementieren.

Hier ist ein konkretes Beispiel, dass einfach verwendet den .NET Framework-Typen: Let's Hash a BLOB

+1

Hallo Mitch Dank dafür. Aus Gründen der Bereitstellung würde ich es in TSQL bevorzugen. Ich werde klären. – WOPR

+0

Es wird erheblich schwieriger zu schreiben und weniger weniger gut in TSQL ... –

+1

Nur ein FYI, SQL 2012 Unterstützung für SHA-256 hinzugefügt. Sie übergeben SHA_256 als Algorithmus. – Oppositional

0

Hat es SHA-256 sein. Es gibt eine SQL HASHBYTES() Funktion, den SHA tun können, SHA1, MD5 usw.

(Natürlich ist es hängt davon ab, wenn Sie nur eine Hash-Darstellung eines Wertes wollen, oder sicher wertvolle Daten zu speichern.)

+0

Hinzugefügt in Fall (wie ich) Ich suchte nach einer nativen HASH-Funktion in SQL Server und sie stoßen auf diese Frage. Es würde bedeuten, dass CLR die einzige Möglichkeit ist, eine HASH-Funktion bereitzustellen. – Guy

+0

CLR Beispiel: http://stackoverflow.com/questions/12416249/hashing-a-string-with-sha256 –

4

SHA256, SHA512 in SQL Server 2008 oder SQL Server 2005!

Sie können tun, wenn Sie die FnEnCryptSHA.dll verwenden !!

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) 
+0

Wo können Sie diese DLL finden? – tigeryan

+0

Sie können es hier bekommen: http://www.innoya.com/Tools/fnEnCryptSHA.aspx – chrilith

+0

Ich wusste nicht, dass Sie eine .dll so einfach durch SQL Server aufrufen können. Sie können auch Ihre eigene Hash-Methode SHA-256 in eine Klasse/.dll schreiben und sie über SQL aufrufen. Sehr cool, danke für die Antwort. – clamum