2013-04-08 3 views
14

두 개의 함수/메소드가 필요합니다. 하나는 인코딩하고 하나는 디코딩해야합니다. 비밀번호 저장을위한 것이 아닙니다. 각 사용자는 데이터를 인코딩하기 위해 특정 키/소금을 갖습니다. 사용 특정 키 - PHP를 사용하여 양방향 인 코드/디코드 메서드를 만드는 방법?

내가이 일을하고 싶은 방법입니다

function encode($str, $key) { 
    // something fancy 
} 

function decode($str, $key) { 
    // something fancy 
} 

$key = $logged_in_user->get_key(); 
$plain = 'abc abc 123 123'; 
$encoded_data = encode($plain, $key); 
// some_fancy_encrypted_data_that_is_really_cooooool 
$decoded_data = decode($encoded_data, $key); 
// abc abc 123 123 

또 다른 것은 때마다 나는 같은 일을 내가 동일한 사용자 키를 사용하여 encode 기능을 사용할 때마다 반환해야이 기능을 사용하는 것이 .

어떻게하면 좋을까요 ??

+4

그래서 mcrypt (http://www.php.net/manual/en/mcrypt.examples.php)를 보셨습니까? 해시를 원한다고 말하면서 '해시'태그를 버리십시오. –

+0

[소규모 클래스가 있습니다] (http://stackoverflow.com/questions/15034368/cannot-decrypt-openssl-encrypt-output-on -command-line)을 사용하는 것이 좋지만 실제로는 각 사용자의 데이터를 개별적으로 개별적으로 암호화해야하는 이유가 있습니다. 일반적으로 공격자가 저장된 데이터를 볼 수있게되면 내부 암호화의 대부분의 사용을 무효화하는 소스 코드를 볼 수 있으며 의도 한대로 처리 할 수 ​​있습니다. – Sammitch

+0

@Sammitch 데이터를 암호화/해독하는 데 사용되는 키를 어디서나 찾을 수없는 경우 (사용자에게만 속함) 유용한 경우가 있습니다. 나는 LastPass가 이것을 잘한다고 확신합니다. – h2ooooooo

답변

46
$myVarIWantToEncodeAndDecode 

정의 키 (염, 국물 등) $key = "#&$sdfdfs789fs7d";

인코딩 할 :

$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $myVarIWantToEncodeAndDecode, MCRYPT_MODE_CBC, md5(md5($key)))); 

를 디코딩하기 :

$decoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encoded), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); 

음표 : mcrypt_decrypt가 사용되지 PHP 7.1.0부터. 이 기능에 의존하는 것은 매우 바람직하지 않습니다.

+0

흠 ..이 작동하는 것,하지만 문자열을 디코딩에서 다시 얻는 데이터는 "A"· "÷"‰ Zvÿ "õE ¥ ‰ ¬DõØ & Hå§'입니다. 뭐가 문제 야? –

+0

그래서 해독하고 오른쪽으로 인코딩합니까? 너 인코딩하는거야? 일반 텍스트? 인코딩 된 데이터는 다음과 같이 보일 것입니다 :'VXHE0iM0bMXQecCAKYAzYZjy4gbctqLGQHYvW2cFhaE =' – rinchik

+0

http://phpfiddle.org/lite/code/zj5-ic6 – rinchik