2014-12-24 2 views
0

2 방향 암호화 측면에서 압도적 인 태도를 보입니다. 많은 정보가 있지만 내 필요에 맞는 단단한 것을 찾을 수 없습니다. 내가 지금처럼 해독 할 때암호화 된 데이터를 mySQL에 저장하는 방법

~/�Jꎈ*3��9k��Z�f������ï 

및 읽을 수없는 문자 :

나는 PHP에서 다음과 같은 한 :

function encrypt($key, $string){ 
    $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key)))); 
    return $encrypted; 
} 

function decrypt($key, $encrypted){ 
    $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); 
    return $decrypted; 
} 
//Stripped out code for readability 
$encryption_Key = 'password'; //such strong, many vulnerable 
$name = encrypt($encryption_Key, $_POST['name']); 
$stmt = $conn->prepare("UPDATE Customers SET 
            name = ? WHERE blah = ?"); 
$stmt->bind_param('si', $name, $blah); 
$stmt->execute(); 
$stmt->close(); 

하지만 MySQL을보고, 나는 같은 전문 용어를 얻을

$name = decrypt($encryption_Key, $name); 

이름 열의 입력란 유형은 현재

012입니다.
varchar(200) 

필드 유형으로 이진 (binary) 또는 blob을 사용하는 예제를 보았지만 많은 행운이 없습니다. 올바른 방향으로 도움을 주시면 대단히 감사하겠습니다.

+0

코드가 제대로 작동했습니다. DB와 테이블의 인코딩이 무엇인지 확인하십시오. –

+0

나는 이것을 해결했지만, 데이터 정렬을 utf8_general_ci로 변경해야했습니다. 마침내이 작은 장애물을 통과했습니다! –

답변

2

그냥 제안합니다. 데이터베이스의 이름 필드에 대한 데이터 정렬을 보았습니까? 그것이 utf8_general_ci과 같은지 확인하십시오. 그런 다음 데이터베이스로 업데이트하기 전에 암호화 된 $name 변수를 인쇄하여 올바른 값이 포함되어 있는지 확인하십시오. 희망이 도움이됩니다.

+0

고맙습니다. 당신이 제안한 것에 데이터 정렬을 설정했는데, 내 코드에서 또 다른 오류가 발견되었고 이제는 작동합니다! –

관련 문제