2016-09-22 5 views
3

PHP 5.2.9 (32 비트 Linux OS)에서 대칭 키 암호화 (blowfish)를 사용하여 문자열을 암호화하려고합니다. (내부 모드에서 실행) phpseclib 1.0.3, 나는 그것을 사용하고 샘플 코드는 매우 간단합니다 :32 비트 Linux OS에서 PHP 5.2.9를 사용하는 Blowfish 대칭 키 암호화가 잘못되었습니다.

include('Crypt/Blowfish.php'); 

$cipher = new Crypt_Blowfish(); 
$data = 'abcdefghijk'; 

$cipher->setKey('abcdefabcdefghi9876543'); 

echo bin2hex($cipher->encrypt($data)); 

생성 된 출력은 (PHP 5.2.9 - 32 비트 리눅스 OS) :

0e1651fc54dd530757fc1711b696dac5 

하지만 다른 서버 (PHP 7.07, PHP 5.3.3, PHP 5.0.4)에서 동일한 코드를 시도했으며 모두이 코드를 생성합니다 (모두 64 비트 Linux OS).

ad7145c675b1c914bbfe379dc7293bf3 

PHP 5.2.9 출력이 잘못되었다고 가정합니다. 이것의 원인이 무엇일까요? 모든 단서?

+0

확인 버전의 문제를 해결 '] [] = $ this-> parray [$ i]^$ data'. 분명히이 XOR 비트 연산자 (^)는 값과 OS (32 비트 또는 64 비트)의 유형에 따라 다른 결과를 반환합니다. 예 :이 코드는 '$ a = 2242054355; $ b = 1701195825; $ 결과 = $ a^$ b; echo $ result;' 32 비트 시스템에서 -523945758을 반환하거나 64 비트 시스템에서 3771021538을 반환합니다. 그래서 문제는 PHP의 버전이 아닌 OS의 유형과 관련이 있습니다 (나중에 제목을 편집 할 것입니다). – Romualdo

+0

또한 https://github.com/phpseclib/phpseclib/issues/1038 – neubert

+0

을 참조하십시오. 매력처럼 작동합니다. 고맙습니다 – Learner

답변

2

32 비트 Linux pre-PHP 5.3에서 float to int conversions와 관련된 문제였습니다. `$ this-> bctx [ 'P : phpseclib의 개발자는 "크립트/Blowfish.php"라인 439에이 명령에 문제처럼 보인다, 1.0.4 & 2.0.4