문제

내가 원하는 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_varbintohexsubstring1 첫 번째 인수로 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 최고 작동 하는 것습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top