我需要的是確保一個字符串以已知的字符編碼進行編碼。到目前爲止,我使用MS SQL Server進行的研究和測試顯示,記錄的編碼是'UCS-2',但實際編碼(在服務器上)是'UCS-2LE'。如何確保Microsoft SQL Server中的特定字符編碼?
這看起來不太可靠。我所喜歡的是PERL,Node或其他任何東西中的ENCODE
函數,所以無論升級或設置如何變化,我的散列函數都將處理已知的輸入。
我們可以將散列字符串限制爲十六進制,所以在最壞的情況下,我們可以手動將16個可能的輸入字符映射到正確的字節。任何人都有這方面的建議?
下面是我使用的PERL:它匹配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";
:
HASHBYTES('SHA_256', 'DDFF5D36-F14D-495D-BAA6-3688786D6CFA123456789')
但我真正想要的是:
HASHBYTES('SHA_256', ENCODE('UCS2-LE', 'DDFF5D36-F14D-495D-BAA6-3688786D6CFA123456789'))
所以,無論什麼MS SQL恰好將輸入字符串編碼爲,HASHBYTES
將始終在已知的字節數組上運行。