7 に答える
私は他の場所で解決策を見つけました:
SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'HelloWorld')), 3, 32)
SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'Hello World'),2)
master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0)
の代わりに使用しmaster.dbo.fn_varbintohexstr
てからsubstringing
、結果を使用します。
実際には内部的にfn_varbintohexstr
呼び出します。fn_varbintohexsubstring
の最初の引数は、プレフィックスとしてfn_varbintohexsubstring
追加するかどうかを指示します。internalyを最初の引数として呼び出します。0xF
fn_varbintohexstr
fn_varbintohexsubstring
1
は必要ありませんので、直接お0xF
電話ください。fn_varbintohexsubstring
David Knightの言うこととは反対に、MS SQL 2008 ではこれらの 2 つの選択肢は同じ応答を返します。
SELECT CONVERT(VARCHAR(32),HashBytes('MD5', 'Hello World'),2)
SELECT UPPER(master.dbo.fn_varbintohexsubstring(0, HashBytes('MD5', 'Hello World'), 1, 0))
したがって、バージョン 2008 以降では、最初のほうが適しているようです。
convert(varchar(34), HASHBYTES('MD5','Hello World'),1)
(16 進数を文字列に変換する場合は 1)
これを下位に変換し、部分文字列によって文字列の先頭から 0x を削除します。
substring(lower(convert(varchar(34), HASHBYTES('MD5','Hello World'),1)),3,32)
バイトを文字列に変換した後に C# で得られるものとまったく同じ
SP変数をハッシュしたストアドプロシージャ内で次のコードを使用した個人的な経験から、文書化されていませんが、この組み合わせは私の例に従って100%機能することを確認できます。
@var=SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA2_512', @SPvar)), 3, 128)
データ型を varbinary に変更すると、私にとっては最適なようです。