2012-04-11 1 views
-1

암호화 된 암호 (md5)를 SQL 데이터베이스로 보냈습니다. 실수로 md5 암호화를 정수 열로 보냈습니다. 입력 한 암호는 "테스트"였고 데이터베이스에 "5"로 표시되고 "qwertyqwerty"라는 암호를 입력했는데 "2147483647"로 나타났습니다. 호기심 때문에 아무에게도이 일을 어떻게 설명 할 수 있습니까? ? 왜 int 값이 그렇게 많이 다른가요?MD5 암호가 INT의 mysql 필드에 전송되었습니다.

+1

2147483647은 SIGNED INT 열의 최대 값입니다. – Interrobang

+0

왜 암호 해싱에 md5를 사용합니까? PBKDF2 또는 bcrypt가 표준 선택 사항입니다. – CodesInChaos

답변

1

MD5는 암호를 암호화하지 않으며 해시합니다.

해시는 주어진 입력을 받아 예측 가능한 출력을 생성하는 (즉, 주어진 입력이 항상 동일한 출력을 가짐) 이상적으로 매우 비슷한 입력조차도 매우 다른 출력을 산출하는 일방적 인 함수입니다.

MD5 해시는 128 비트입니다. 이러한 128 비트를 32 비트 SQL 열에 쓰려고하면 확실히 일부 잘림이 발생합니다.

MD5를 생성하는 데 사용 된 특정 코드를 이해하지 못하고 정수로 변환 한 다음 SQL에 쓰면 왜 작은 숫자가 나오는지 이해할 수 없으며 다른 번호에는 부호 첨부 int의 최대치 코드를 게시하려면 의견을 기재하게되어 기쁩니다.

+0

의도하지 않았고 ive가 문제를 고쳤습니다. (md5에서 원하고 진정한 암호화가 필요합니다.)하지만 정보를 제공해 주셔서 감사합니다! –

0

왜 첫 번째 값이 5로 나타나는지 말할 수는 없지만 두 번째 값은 정수형 열이 가질 수있는 최대 값이기 때문에 두 번째 값이 나타났습니다.

mysql이 문자열 MD5 해시를 정수로 변환 (또는 시도)하면 정수가 보유 할 수있는 최대 값을 초과하므로 최대 정수가 대신 저장됩니다.