2017-05-11 14 views
1

openssl_encrypt을 올바르게 사용하는 방법을 찾았으며 몇 가지 stackoverflow 질문과 대답을 발견했습니다. 그러나, 나는 그것이 작동하도록 두려워합니다.openssl_encrypt가 작동하지 않고 오류가 발생하지 않습니까?

나의 현재 코드는 다음과 같습니다

$encryption_key = openssl_random_pseudo_bytes(32); 
$iv = openssl_random_pseudo_bytes(32); 
$encrypted = openssl_encrypt($data, 'AES-256-CTR', $encryption_key, 0, $iv); 
$error = openssl_error_string(); 
var_dump($encrypted, $error); 

var_dump 그냥 나에게 bool(false) bool(false)을 제공합니다. 작동하지 않고 오류가 발생하지 않습니다.

누구든지 나를 도와 줄 수 있습니까?

편집 : 정확하게 문제가 무엇인지는 모르지만 분명히 AES-256-CTR을 사용하면 시스템에서 작동하지 않습니다. 위의 코드와 함께 AES-256-CBC를 사용하면 ...

답변

0

PHP에서 enable error reporting을 잊어 버렸기 때문에 오류가 발생하지 않습니다. 당신이 한 경우에, 당신은 볼 것이다 :

을 E_WARNING : 제 2 형 - openssl_encrypt을()에 전달 IV는 절단, 이상 선택 암호가 예상하는 16 이상되는 32 바이트 길이 - 6 행에

AES는 128 비트 또는 16 바이트의 고정 블록 크기를 갖는 블록 암호입니다. CTR 모드의 논스 (여기서는 IV 초기화 벡터라고 함)는 블록 크기만큼 길어야합니다. 최적의 보안을 위해 96 비트 또는 12 바이트 길이의 nonce를 사용하는 것이 좋습니다. 나머지 32 비트 또는 4 바이트는 0으로 채워 할 수 있습니다 : 당신은 CBC 모드를 사용하는 경우

$iv = openssl_random_pseudo_bytes(12) . "\0\0\0\0"; 

은, 다음 사용할 필요

$iv = openssl_random_pseudo_bytes(16);