2
T-SQL을 사용하여 유니 코드 문자열의 SHA1
해시를 계산하려고합니다.T-SQL을 사용하여 'nvarchar'문자열의 SHA1 해시 계산
declare @input varchar(50)
set @input = 'some text'
print 'SHA1 Hash: ' + UPPER(master.dbo.fn_varbintohexsubstring(0, HashBytes('SHA1', @input), 1, 0))
을하지만 declare @input nvarchar(50)
와 코드의 첫 번째 라인을 교체 할 때 그것은 잘못된 해시를 계산 : 아래의 코드는 ASCII
문자열과 함께 잘 작동합니다.
Calculated hash (nvarchar): BBA91B680CE2685E9465DE24967E425CF055B10F
Calculated hash by a tool : 37AA63C77398D954473262E1A0057C1E632EDA77
가 어떻게이 nvarchar
의 SHA1
해시를 계산할 수있다?
[편집] :
// Computes SHA1 hash of a given string
string ComputeHash(string input)
{
string result = string.Empty;
byte[] hash;
byte[] bytes = Encoding.GetBytes(input);
using (var sha = SHA1Managed.Create())
hash = sha.ComputeHash(bytes);
foreach (var b in hash)
result += b.ToString("X2");
return result;
}
편집 참조하십시오 – Xaqron
감사합니다, 유용한 링크. 기사에서 설명하는대로 'HashBytes'와 관련된 알려진 버그입니다. 이제 Microsoft가 국제 표준을 채택하는 것이 왜 그리 좋지 않은지 이해할 수 있습니다. 동일한 회사의 두 팀이 입력 ** 데이터 유형 **에 따라 다르게 해시를 계산할 때 (SQL vs. .NET). – Xaqron
@Xaqron : 예, 정확히 ..... 링크가 도움이 되셨습니다. – Lamak