[SQL Server] SHA512のデータ暗号化及びパスワード暗号化
SHA512を使ってデータやパスワードを暗号化することができます。
SHA512の場合はSQL SERVER 2012以上で使えます。
SQL SERVER 2005, SQL SERVER 2008環境でSHA512を利用したい場合は
fnEncryptSHAをご利用ください。
SHA512は512Bitで64Byteを使いますので、
このデータを保存する際にはデータ型をvarbinary(64)に指定してください。
DECLARE @Str varchar(100)
SET @Str = 'innoya'
SELECT HASHBYTES('SHA2_512', @Str)
実行結果
ここで注意点!!!!
暗号化(ハッシュ)する文字のデータ型によって同じ文字列でも戻り値は変わります。
下記は同じ文字をvarcharとnvarcharに保存して暗号化(ハッシュ)するSQLです。
DECLARE @Str1 varchar(100), @Str2 nvarchar(100)
SET @Str1 = 'innoya'
SET @Str2 = 'innoya'
SELECT HASHBYTES('SHA2_512', @Str1) AS Str_varchar, HASHBYTES('SHA2_512', @Str2) AS Str_nvarchar
実行結果
これはSHA512だけではなく、「HASHBYTES」関数を使用するMD2, MD4, MD5, SHA, SHA1, SHA2_256(SHA256), SHA2_512(SHA512)すべて同じですので注意してください。。
SHA512に暗号化したデータを文字列に変更する方法
「master.dbo.fn_varbintohexstr」を使うとバイナリを文字列に変更することができます。
DECLARE @Str varchar(100)
DECLARE @DataVarbinary varbinary(64)
SET @Str = 'innoya'
SET @DataVarbinary = HashBytes('SHA2_512', @Str)
SELECT master.dbo.fn_varbintohexstr(@DataVarbinary) AS [Result], @DataVarbinary AS [VarbinaryData]
実行結果
master.dbo.fn_varbintohexstr(@DataVarbinary)で「0x8d5a7710797f8a14c9c7e16acaf8d693878d59d95514ce6272b5693cbf54c9b14142e473a034fe719dafe5030d266dc6582547ce04dbbe0a51bf6d59212c4c7b」が返されました。
頭文字に変更したのにバイナリデータ見たいに「0x」が付いています。
頭文字の「0x」が必要ない時は「RIGHT」を使って後ろから64文字を切り取ります。
暗号化する文字が長くても暗号化したらvarbinary(64)に決まっているので
文字列に変更すると頭文字の「0x」を除いたら128文字になります。
DECLARE @Str varchar(100)
DECLARE @DataVarbinary varbinary(128)
SET @Str = 'innoya'
SET @DataVarbinary = HashBytes('SHA2_512', @Str)
SELECT RIGHT(master.dbo.fn_varbintohexstr(@DataVarbinary),128)
実行結果
上記の結果からまた文字列を大文字にしたい場合は「UPPER」を利用します。
DECLARE @Str varchar(100)
DECLARE @DataVarbinary varbinary(128)
SET @Str = 'innoya'
SET @DataVarbinary = HashBytes('SHA2_512', @Str)
SELECT UPPER(RIGHT(master.dbo.fn_varbintohexstr(@DataVarbinary),128))
実行結果