SHA256 해시는 얼마나 걸립니까?


247

나는 SHA256암호 + 소금을 사용하려고하지만 VARCHARMySQL 데이터베이스를 설정할 때 얼마나 오래 갈지 모르겠습니다 . 좋은 길이는 무엇입니까?


9
이 내용을 읽는 사람이이 조언을 따르고 SHA-*암호를 해시 하기 전에 먼저이 내용을 읽으십시오 .
c00000fd

2
암호에 SHA-256을 사용하지 않는 한, 해시 길이는 256 비트 또는 64 개의 16 진수 문자, 43 개의 영숫자 문자 또는 32 바이트입니다.
caw

답변:


335

sha256의 이름은 256 비트입니다.

sha256은 16 진 표현을 리턴하므로 ASCII와 같이 8 개 대신 4 개의 문자로 각 문자를 인코딩하기에 충분하므로 256 비트는 64 개의 16 진수 문자를 나타내므로 길이가 항상 동일 하므로 varchar(64), 또는 을 필요 char(64)로합니다. 전혀 변하지 않습니다.

그리고 데모 :

$hash = hash('sha256', 'hello, world!');
var_dump($hash);

당신에게 줄 것이다 :

$ php temp.php
string(64) "68e656b251e67e8358bef8483ab0d51c6619f3e7a1a9f0e75838d41ff368f728"

즉, 64 자의 문자열입니다.


7
char (64)를 기본 키로 사용할 수 있습니까 아니면 binary (32)가 더 좋을까요? (access_token)
frankish

3
미래에 사용자를 차단하고 싶을 것이라고 생각한다면 varchar(65), 선두에 !...를 사용 하는 것이 좋습니다 .
Manatax

103
... 또는 'blocked'열을 추가합니까?
Stijn de Witt

5
각 비밀번호마다 다른 소금을 사용하려면 이것을 해시 옆에 저장해야합니다. 이를 위해 추가 필드를 사용하거나 해시에 사전 / 추가 할 수 있으므로 64 자 이상이 필요합니다
Patrick Cornelissen

4
이 select 문을 사용하여 테스트 할 수 있습니다 SELECT length(to_base64(unhex(sha2('say hello to my little friend',256)))). 원본 문자열의 길이에 관계없이 항상 44입니다.
DrAhmedJava

72

SHA256의 256 비트 인코딩 옵션 :

  1. Base64 : CHAR(44)문자 당 6 비트 = 패딩 문자 포함
  2. 16 진수 : 문자 당 4 비트 = CHAR(64)
  3. 이진 : 바이트 당 8 비트 = BINARY(32)

30
Base64는 4 문자 당 3 바이트이므로 32 바이트가 43 자에 해당하더라도 실제로 44가 필요합니다. 추가 문자 = 최종 문자로 추가됨
Wilco

2
글쎄, =제거하고 다시 추가 할 수 있습니다.
Rick James

28

BINARY (32)는 최적화 된 방식이므로 사용하는 것을 선호합니다!

(00에서 FF)까지 32 개의 16 진수를 넣을 수 있습니다.

따라서 이진 (32)!


8
+1-MySQL에서 이것을 사용하기 위해 ... 다른 사람에게 최적화 된 것을 좋아합니다 UPDATE...SET hash_column=UNHEX(sha256HexString). 그런 다음 검색 할 때 SELECT HEX(hash_column) AS hash_column.
케빈 넬슨

22

왜 VARCHAR로 만드시겠습니까? 다양하지 않습니다. 항상 64 자이며 온라인 SHA-256 계산기 중 하나를 실행하여 확인할 수 있습니다 .


(64)는 유효한 mysql 문입니까?
Tony Stark

28
@ hatorade : 아니요 명령문이 아니지만 유효한 열 유형입니다.
Mark Byers

10
varchar는 사용하지 않는 한 공간을 할당하지 않습니다. char과 달리 데이터를 채우는 데 관계없이 허용되는 총 문자 수를 할당합니다.
Xenland

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.