IT

HashBytes를 VarChar로 변환

lottoking 2020. 7. 14. 07:55
반응형

HashBytes를 VarChar로 변환


SQL Server 2005에서 존재하는 값의 MD5는 해시를 얻습니다. 다음 명령을 사용하여 하여이 작업을 수행합니다.

SELECT HashBytes('MD5', 'HelloWorld')

그러나 VarChar 값 대신 VarBinary를 반환합니다. 0x68E109F0F40CA72A15E05CC22786F8E6이 VarChar 로 CHAPTER 2하려고 하면 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)

12 개의 하위 계층으로 변환하여 상위의 시작 부분에서 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로 변경하면 가장 좋습니다.

참고 URL : https://stackoverflow.com/questions/2120/convert-hashbytes-to-varchar

반응형