2016-11-15 10 views
0

누군가가 AES를 도와 줄 수 있습니까? phpseclib를 사용하여 데이터를 암호화하고 해독했지만 데이터를 해독 할 수없는 것으로 보입니다. 아래 내 코드를 참조하십시오. 다른 페이지의 데이터를 해독하고 싶었습니다. 미리 감사드립니다!phpseclib을 사용한 AES 암호화

$base64 = "AAA"; 

$cipher = new Crypt_AES(); 
$cipher->setKey('QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'); 
$cipher->setIV(crypt_random_string($cipher->getBlockLength() >> 3)); 
echo $encrypted = $cipher->encrypt($base64); 


$cipher = new Crypt_AES(); 
$cipher->setKey('QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'); 
$cipher->setIV(crypt_random_string($cipher->getBlockLength() >> 3)); 
echo 'decrypted:'. $cipher->decrypt($encrypted); 

결과

% NKy0k이 : 해독 :

업데이트 :

이 그것은의 목록을 유지하는 것이 필요하다는 뜻 초기화 벡터 데이터를 해독하기 위해서?

업데이트 :

나는 루멘 프레임 워크를 사용하기로 결정했습니다. 루멘에는 IV 및 기타 암호화 기술 자료를 처리하는 내장 된 암호화 기능이 있습니다. 당신의 도움을 주셔서 감사합니다!

답변

-1

라이브러리를 사용 중입니다. openssl_encrypt()을 사용하지 않는 이유는 무엇입니까? 암호화

:

openssl_encrypt($text, $method, $key); 

매개 변수 :

  1. $text : 암호화 할 텍스트입니다.
  2. $method : 암호화에 사용할 방법입니다. 주로 AES-256-ECB을 사용합니다.
  3. $key : 암호화에 사용하는 키입니다.

예 :

$data = openssl_encrypt('Hello', 'AES-256-ECB' 'test'); 

암호 해독 :

openssl_decrypt($encrypted_text, $method, $key); 

매개 변수 :

  1. $encrypted_text : 암호화 된 텍스트.
  2. $method : 해독에 사용할 방법입니다.
  3. $key : 텍스트 암호를 해독 할 수있는 키입니다.

예 :

openssl_decrypt($data, 'AES-256-ECB', 'test'); 
+0

라이브러리를 사용하기로 결정하기 전에 사용해 보았습니다. 초기화 벡터가 필요하다는 오류/경고가 나타났습니다. 초기화 벡터는 실마리가 없습니다. – bwaaaaaa

+0

여기에 아주 좋은 예제가 있습니다 (http://creepergaming.net/encrypt) openssl을 사용합니다 –

+3

@bwaaaaaa 그건 단지 당신이 암호화를 공부하기 위해 휴식을 취해야한다는 것을 의미합니다. 암호화 및 암호 해독 작동을 제대로 사용하지 않으면 보안이 제공되지 않습니다. – zaph

0

당신은 두 경우 모두에서 다른 IV를 사용하는 - 동일한 IV를 사용해야합니다.이것을 시도하십시오 :

$base64 = "AAA"; 
$iv = crypt_random_string($cipher->getBlockLength() >> 3); 

$cipher = new Crypt_AES(); 
$cipher->setKey('QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'); 
$cipher->setIV($iv); 
echo $encrypted = $cipher->encrypt($base64); 


$cipher = new Crypt_AES(); 
$cipher->setKey('QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'); 
$cipher->setIV($iv); 
echo 'decrypted:'. $cipher->decrypt($encrypted); 
+1

정적 IV를 사용하면 보안과 관련하여 문제가 있습니까? 답장을 보내 주셔서 감사합니다. – bwaaaaaa

+0

정적 IV를 사용하지 마십시오. 동일한 메시지를 다시 암호화하면 암호화 된 데이터가 동일 해지고 정보가 유출되기 때문입니다. – zaph

+0

@zaph 감사합니다! 나는 동의하고 이것에 대한 나의 연구도했다. 다른 라이브러리/플러그인을 비교해 보았습니다. IV가 동적 인 경우 가장 좋습니다. 역동적으로 만드는 것은 어렵지만 더 안전합니다. 어쨌든 루멘 프레임 워크를 사용하기로 결정했습니다. 그것은 내장 된 암호화 기능을 가지고 있습니다. 따라서 더 깊이 파고들 필요가 없습니다. – bwaaaaaa

0

임의로 생성 된 IV를 암호화에 사용하십시오. IV는 비밀이 될 필요가 없으므로 암호화 된 데이터 앞에 IV를 붙이면됩니다. 그런 다음 IV를 해독 할 수 있습니다.

암호화 키 'QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'은 512 비트 (64 바이트)이지만 128 비트, 192 비트 및 256 비트의 세 가지 AES 키 크기 만 있습니다.