2014-05-22 6 views
0

아래 그림과 같이 I 인코딩 및 액세스 토큰을 디코딩하는 Mcrypt 라이브러리에 대한 PHP 코드를 가지고 :Mcrypt 라이브러리 디코딩 데이터 형식

$string = "secrettoken"; 

// Encryption/decryption key 
$key = "key12345"; 

// Encryption Algorithm 
$cipher_alg = MCRYPT_RIJNDAEL_256; 

// Create the initialization vector for added security. 
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg, 
    MCRYPT_MODE_ECB), MCRYPT_RAND); 

// Output original string 
print "Original string: $string <p>"; 

// Encrypt $string 
$encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string, MCRYPT_MODE_CBC, $iv); 
$token = bin2hex($encrypted_string); //prints in hexadecimal format 

// Convert to hexadecimal and output to browser 
print "Encrypted string: ".encrypted_string."<p>"; 

$decrypted_string = mcrypt_decrypt($cipher_alg, $key, $encrypted_string, 
    MCRYPT_MODE_CBC,$iv); 

print "Decrypted string: $decrypted_string"; 

//check if the original string is equal to the descripted string 
if($decrypted_string == $string) 
    print("Yep"); 
else 
print("Nada"); 

// scrypt를 실행 한 후, 나는 다음과 같은 결과를 얻을 : 원본 문자열 : secrettoken 암호화 된 문자열 : 해독 된 문자열을 encrypted_string : secrettoken 문자열 = 해독 문자열 :

거짓 그래서 $ 문자열과 $ descrypted 문자열의 값이 값을 비교하려고하는 것은 그렇지 않은 증명, 동일하더라도처럼 보인다. 나는 그것이 데이터 유형과 관련이 있다고 가정하고있다. 나는 단지 PHP를 배우고 있다고 고백해야한다. (나의 주요 플랫폼은 자바이고 가변 타입은 PHP와는 다르다). 그렇다면 어떻게 두 값을 비교하여 사실이 될 수 있습니까? 나는 "==="을 사용해 보았고 또한 작동하지 않았다.

+2

출력중인'encrypted_string' 전에'$'기호가 누락되면 도움이되지 않습니다. –

답변

1

나는이 변수를 로컬에서 실행했으며 각 변수의 var_dump은 해독 된 변수의 끝에 일부 문자 (��������������������)가 있음을 보여줍니다.

공백과 새 줄 등을 제거하는 간단한 trim()을이 변수에 추가하면 엄격한 비교 (===)와 동일한 일치가 생성됩니다.

if(trim($decrypted_string) === $string) 
    print("Yep"); 
참고로

(당신이 PHP를 처음 말했기 때문에), var_dump($var_name) 중 하나 끝에 공백 등이 변수 유형을 출력하기 때문에 변수를 비교할 수있는 좋은 방법뿐만 아니라 값이며, .

느슨한 비교 ==은 변수 유형을 고려하지 않습니다. '123' == 123이 참입니다. 엄격한 비교 ===이 유형을 고려하므로 '123' === 123은 거짓입니다. 필자가 생각하기에 변수가 특정 유형일 것으로 예상되는 경우 엄격한 비교가 사용되어야합니다. 느슨한 비교 부울 true를 사용하면 == 1 또는 0 일 수 있습니다. PHP shuffles 변수 유형이 때로는 예상치 못한 결과가 발생할 수 있습니다. 자체 ...

+0

감사 스크롤러. 그게 내 문제를 해결해 줬어. –

+0

어쨌든 디버깅 할 때'var_dump'를 사용해야합니다. 이것은 생명의 은인입니다. –