2016-03-31 48 views
1

私の暗号化をmcryptからopensslに移行しようとしましたが、復号化に失敗します。以下のコードは自分の暗号化機能を示しています。私はvar_dumpを暗号化関数に置き、同じ変数を使って復号化を検証しましたが、そうではありません。openssl_decryptは常にfalseを返します

は、私は、コードに次の変更を試みたが、何も働いていない:

    だけ
  • に設定されたオプションを持つすべてのこれらの変異体の好奇心base64_encode($encrypted)のうち
  • base64_decode($encrypted)
  • :0(デフォルト値)、OPENSSL_RAW_DATA、

OPENSSL_ZERO_PADDING 210
function encryptString($data){ 
    $key = "1A534"; 

    do{ 
     $iv = random_bytes(100); 
    }while(strpos($iv,"|Z|")!==false); 

    $encrypted = openssl_encrypt($data,"aes-256-gcm",$key,false,$iv); 
    var_dump(openssl_decrypt($encrypted,"aes-256-gcm",$key,OPENSSL_RAW_DATA,$iv)); 
    $output = $iv . "|Z|" . $encrypted; 
    $output = base64_encode($output); 
    return $output; 
} 

PHPバージョン7.0.5-1 + deb.sury.org〜

1 +信頼できるOpenSSLのバージョンは、OpenSSL 1.0.2gです2016年3月1日

はなぜfalseを返すopenssl_decrypt続けますか?私は正常に上の行と同じ変数で暗号化に成功しました。

+1

認証タグのバグがあるため、これはPHP 7.1までは動作しません。 –

+0

と思われます。 GCM暗号は正しく機能しません。 – Us3r

+0

このシナリオでは7.1を使用していますが、すべてのシナリオでfalseが返されます。 – Dockstar

答えて

0

PHPでは動作しません< 7.1 AEADはサポートされていません。

the library I created(PHP 5.4+および7.0+)を使用できます。 - PHP 7.1でのOpenSSL、 - libCrypto extension、 - 純粋なPHPの実装 :

ご使用の環境によっては、次のメソッドをテストして使用します。

純粋なPHPメソッドは他のメソッドに比べて非常に遅いことに注意してください。

関連する問題