해시 바이트를 VarChar로 변환
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
내면의 첫 번째 주장으로서.
필요없으니까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
'programing' 카테고리의 다른 글
MVVM Light RelayCommand 파라미터 (0) | 2023.04.17 |
---|---|
Excel이 내 빈 셀이 비어 있지 않다고 알려준다. (0) | 2023.04.17 |
OS X에서 zsh에서 bash로 전환하고 다시 되돌리시겠습니까? (0) | 2023.04.17 |
컴파일로 인해 "사용자 정의 유형이 정의되지 않음" 오류가 발생하지만 문제가 되는 코드 행으로 이동하지는 않습니다. (0) | 2023.04.17 |
Bash 목록에 변수가 있는지 확인합니다. (0) | 2023.04.17 |