source

해시를 저장하기 위해 어떤 종류의 데이터 유형을 사용해야 합니까?

lovecheck 2023. 7. 6. 22:20
반응형

해시를 저장하기 위해 어떤 종류의 데이터 유형을 사용해야 합니까?

SQL Server의 데이터 유형에 따라 해시가 달라지는 것으로 알고 있습니다.하나는 유니코드를 지원하지만 다른 하나는 지원하지 않습니다... ... 등(또한 조합).

데이터 타입으로 char(32)를 사용하고 있는데 출력이 이상합니다.사용

select HASHBYTES('MD5','MD5Text')

는 다음과 같은 출력을 제공합니다.

0xA891DB2DA259280A66FD5F35201CAB6A

그리고 언제

declare @h char(32)
select @h=HASHBYTES('MD5','MD5Text')
select @h,LEN(@h)

출력:

ё'ў-эY(f«_5ыj)

그래서 저는 SQL Server가 처음입니다.
해시를 저장할 때 어떤 데이터 유형을 사용해야 하는지 알려주실 수 있나요?

데이터 유형을 사용해야 합니다.사용할 수 있습니다.binary대신에varbinary왜냐하면 해시 함수는 항상 동일한 유형의 해시에 대해 동일한 수의 바이트를 반환하기 때문입니다(예:MD5,SHA1등).이렇게 하면 가변 길이 이진수를 관리하는 데 필요한 (약간의) 오버헤드를 줄일 수 있습니다.varbinary) 열.

생성할 크기와 관련하여 다음 쿼리를 실행하여 각 해시 유형의 길이를 확인할 수 있습니다.

SELECT  DATALENGTH(HASHBYTES('MD2', 'Testing')) AS [MD2Length],
        DATALENGTH(HASHBYTES('MD4', 'Testing')) AS [MD4Length],
        DATALENGTH(HASHBYTES('MD5', 'Testing')) AS [MD5Length],
        DATALENGTH(HASHBYTES('SHA', 'Testing')) AS [SHALength],
        DATALENGTH(HASHBYTES('SHA1', 'Testing')) AS [SHA1Length],
        /* 2012 only: */
        DATALENGTH(HASHBYTES('SHA2_256', 'Testing')) AS [SHA2_256Length],
        DATALENGTH(HASHBYTES('SHA2_512', 'Testing')) AS [SHA2_512Length];

그리고 이것은 다음과 같이 밝혀져야 합니다.

MD2Length MD4Length MD5Length SHALength SHA1Length SHA2_256Length SHA2_512Length
--------- --------- --------- --------- ---------- -------------- --------------
16        16        16        20        20         32             64

언급URL : https://stackoverflow.com/questions/14722305/what-kind-of-datatype-should-one-use-to-store-hashes

반응형