문제
내가 원하는 MD5 해쉬의 문자열 값에 SQL Server2005.내가 이렇게 다음 명령을 사용:
SELECT HashBytes('MD5', 'HelloWorld')
그러나,이를 반환하 VarBinary 대신 VarChar 값입니다.경도 변환 0x68E109F0F40CA72A15E05CC22786F8E6
로 VarChar 나 há ðô§*à\Â'†øæ
대 68E109F0F40CA72A15E05CC22786F8E6
.
어떤 SQL 을 기반 솔루션?
해결책
내가 찾은 해결책이 다른 곳:
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
알려줍니다 추가 0xF
접두사로 사용하거나지 않습니다. fn_varbintohexstr
전화 fn_varbintohexsubstring
가 1
첫 번째 인수로 internaly.
기 때문에 당신은 필요가 없 0xF
, 전화 fn_varbintohexsubstring
이 직접 있습니다.
에 반하는 것 다윗은 기사 은 말한다,이러한 두 가지 대안 동일한 응답 MS SQL2008:
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)
(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 최고 작동 하는 것습니다.