programing

해시 바이트를 VarChar로 변환

telebox 2023. 4. 17. 21:40
반응형

해시 바이트를 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_varbintohexstrfn_varbintohexsubstring내부적으로의 첫 번째 논거는fn_varbintohexsubstring추가하도록 지시하다0xF프리픽스로 사용할지 여부를 지정합니다. fn_varbintohexstrfn_varbintohexsubstring와 함께1내면의 첫 번째 주장으로서.

필요없으니까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)

이것을 낮은 값으로 변환하고 하위 문자열로 문자열 시작 부분에서 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)

데이터 유형을 바이너리로 변경하는 것이 가장 효과적일 것 같습니다.

언급URL : https://stackoverflow.com/questions/2120/convert-hashbytes-to-varchar

반응형