[sql] HashBytes를 VarChar로 변환

SQL Server 2005에서 문자열 값의 MD5 해시를 가져오고 싶습니다. 다음 명령으로이 작업을 수행합니다.

SELECT HashBytes('MD5', 'HelloWorld')

그러나 VarChar 값 대신 VarBinary를 반환합니다. 0x68E109F0F40CA72A15E05CC22786F8E6VarChar 로 변환하려고 하면 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_varbintohexsubstring1internaly 첫 번째 인수로.

이 필요하지 않기 때문에 직접 0xF전화하십시오 fn_varbintohexsubstring.


답변

David Knight의 말과 달리이 두 대안은 MS SQL 2008에서 동일한 응답을 반환합니다.

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)

(16 진수를 문자열로 변환하기위한 1)

이것을 하위 문자열로 낮추고 문자열의 시작 부분에서 0을 제거하여 하위 문자열로 제거하십시오.

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로 변경하면 가장 효과적입니다.