私が必要とするのは、文字列が既知の文字エンコードでエンコードされるようにすることです。これまでのところ、MS SQL Serverの調査とテストでは、文書化されたエンコーディングが「UCS-2」であることが明らかになりましたが、実際のエンコーディングは問題のサーバーでは「UCS-2LE」です。Microsoft SQL Serverで特定の文字エンコーディングを保証する方法は?
これは信頼性が低いと思われます。私が大好きなのは、PERL、Node、またはその他のものにあるようなENCODE
の機能です。アップグレードや設定の変更に関係なく、私のハッシュ関数は既知の入力で動作します。
ハッシュ文字列をHEXに制限することができます。最悪の場合、16個の入力文字を適切なバイトに手動でマップできます。誰もがこれについての勧告を持っていますか? MS SQLと一致する
use Digest::SHA qw/sha256/;
use Encode qw/encode/;
$seed = 'DDFF5D36-F14D-495D-BAA6-3688786D6CFA';
$string = '123456789';
$target = '57392CD6A5192B6185C5999EB23D240BB7CEFD26E377D904F6FEF262ED176F97';
$encoded = encode('UCS-2LE', $seed.$string);
$sha256 = uc(unpack("H*", sha256($encoded)));
print "$target\n$sha256\n";
を::
ここで私が使用しているPerlの
HASHBYTES('SHA_256', 'DDFF5D36-F14D-495D-BAA6-3688786D6CFA123456789')
しかし、私が本当にしたいことは次のとおりです。
HASHBYTES('SHA_256', ENCODE('UCS2-LE', 'DDFF5D36-F14D-495D-BAA6-3688786D6CFA123456789'))
何があっているのでMS SQLは、入力文字列を次のようにエンコードします。HASHBYTES
は、常に既知のバイト配列で動作します。