2011-11-29 4 views
0

문자열이 md5 인 것으로 가정합니다. ('somestring'). 0..f 기호가 포함됩니다. 그래서 char (32)는 해시를 저장해도 괜찮지 만 21 바이트 ([log 38/log 236 + 1]) * 길이 (해시)를 넘길 수는 없다고 생각합니다. 기호 0..A를 가진 문자열로 0..f 기호로 문자열을 변환하는 모든 빠른 기능? (숫자와 라틴 문자 만 사용하기 때문에 21 바이트 이상 소요)?php : varchar ([log [38] 16) +1)에 0..9a..f가 포함 된 varchar (32)의 빠른 변환 ... 0..9A..z

+0

그래서 당신이 실제로 찾고 기본 16에서 기초 62 변환까지, 맞습니까? 또는 가능한 한 적은 스토리지를 사용하여 데이터베이스에 MD5 값을 저장하는 방법을 알고 싶습니까? – Gumbo

답변

0

second parameter true로 설정합니다

string md5 (string $str [, bool $raw_output = false ]) 
2

더 나은 : 이진 해시 결과를. 이진은 인덱스를 사용하여 더 빠르고 더 빠르게 실행됩니다.

mysql을 사용하면 bin(16) 필드를 만들 수 있습니다. 쿼리는 다음과 같다 :

SELECT * FROM `table` WHERE `field` = UNHEX('md5 hash') 

PHP를 사용에서이 기능 (bin으로 16 진수)

function convert($hexString) 
    { 
      $hexLenght = strlen($hexString); 
      // only hex numbers is allowed 
      if ($hexLenght % 2 != 0 || preg_match("/[^\da-fA-F]/",$hexString)) return FALSE; 

      unset($binString); 
      for ($x = 1; $x <= $hexLenght/2; $x++) 
      { 
        $binString .= chr(hexdec(substr($hexString,2 * $x - 2,2))); 
      } 

      return $binString; 
    } 

당신은 또한 사용할 수 있습니다 http://php.net/manual/en/function.hex2bin.php

http://php.net/manual/en/function.bin2hex.php