2013-04-09 7 views
-4

안녕하세요 분명히 이것은 코드와 관련된 질문이 아니며, 저는 PHP에서 salt와 md5 암호화에 익숙합니다. 하지만 mysql에 중요한 정보를 저장하는 안전한 방법이 필요합니다. md5를 사용하는 것은 매우 간단하지만 다시는 가장 안전한 방법은 아닙니다. 제안이나 사례를 알려주십시오. db에 저장해야하며 물론 검색하고 읽을 가능성이 있습니다. 가장 간단한 방법은민감한 데이터를 저장하는 가장 좋은 방법은 PHP 암호화

+0

예를 들어 민감한 데이터는 무엇입니까? –

+0

'읽을 수있는 가능성'- 그냥 궁금해서, 친숙한 md5로 시도 했습니까? –

+0

은 pedantic, MD5는 암호화가 아니지만 해시가됩니다. 이것은 MD5 해시가 "해독"될 것으로 예상되지 않기 때문에 다릅니다. – SirDarius

답변

1
public static function encrypt($string, $salt = NULL){ 

    $mcrypt_iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); 
    $mcrypt_iv = mcrypt_create_iv($mcrypt_iv_size, MCRYPT_RAND); 

    $mcrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $salt, $string, MCRYPT_MODE_ECB, $mcrypt_iv); 

    $encoded = base64_encode($mcrypted); 

    return $encoded; 
} 

public static function decrypt($hash, $salt = NULL){ 

    $mcrypt_iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); 
    $mcrypt_iv = mcrypt_create_iv($mcrypt_iv_size, MCRYPT_RAND); 

    $basedecoded = base64_decode($hash); 

    $mcrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $salt, $basedecoded, MCRYPT_MODE_ECB, $mcrypt_iv); 

    return $mcrypted; 
} 

다음 코드가 동작하는 예제이며, AES-128 모드 ECB를 사용 찾고 어떤 메신저입니다. 사용 된 암호화 용어와 친숙하지 않다면 큰 문제가되지 않습니다. 그냥 코드를 사용하십시오. :)

2

DB에 암호화 된 내용을 저장하는 경우 암호를 해독하지 않으려 고합니다. 그것을 다시 읽고 싶다면, 왜 처음부터 그것을 암호화해야합니까?

암호화의 경우 향후 코드와의 호환성을 보장하고 보안을 강화하는 가장 좋은 방법은 crypt()를 사용하는 것입니다.

php.net/crypt

는()하여 crypt 전달할 수 있습니다 당신이 암호를 저장하는 경우 아마 "라운드"에 대한 충분히 높은 충분한 수의 SHA512를 사용하는 것이 여러 가지 옵션이 있습니다. 체크 아웃 : 예 : http://php.net/crypt#example-4701.

기본적으로 DB에서 해시 값을 가져오고 일반 텍스트의 소금으로 사용하여 일반 텍스트가 DB에 저장된 것과 동일한 암호인지 여부를 확인할 수 있습니다. 단방향 암호화, 암호 해독이 아닙니다 아직, 어쨌든;)

+0

예를 들어 계좌 번호와 같은 저장된 데이터를 암호화하는 요점은 무엇입니까? 다시 검색 할 수 없으면 어떻게됩니까? 암호에 대해 다른 점을 이해합니다. – cppit

+0

왜 계좌 번호를 암호화 하시겠습니까? 암호화의 본질은 데이터를 숨기는 것입니다. 암호 해독이 용이하다면 평문을 가질 수도 있습니다 :) – euxneks

+1

웹 서버와 데이터베이스가 서로 다른 컴퓨터에 있으면 여기에 대한 논리가 있습니다. 비록 단 하나의 서버가 손상 되더라도 당신은 아마 꽤 가라 앉을 것이다. – Hans