SQL Server 2005에서 문자열 값의 MD5 해시를 가져오고 싶습니다. 다음 명령으로이 작업을 수행합니다.
SELECT HashBytes('MD5', 'HelloWorld')
그러나 VarChar 값 대신 VarBinary를 반환합니다. 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
.
답변
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로 변경하면 가장 효과적입니다.