2016-11-29 63 views
2

私のphp-appの暗号化機能をmcryptからopensslに変更したいと思います。今私はopenslのmcrypt_enc_get_key_size()のような関数がないのですか?どのようにして最大値を読み取ることができますか? opensslのcypher-methodのkeysize?php-opensslでキーサイズに関する情報を取得する方法

例:フグ(CFB)

mcrypt_enc_get_key_size() returns 56 (Bytes) => 448bit 

任意のアイデア?

答えて

0

OpenSSLにこのような機能はありません。 1つのオプションは、サポートされている各暗号のキーサイズを確認し、スイッチを使用する方法です。あなたがAESを好むなら、あなたはこのようなことをすることができます。

$method = "AES-256-CBC"; // Or whatever you want 

if (preg_match("/^aes-?([0-9]+)/i", $method, $matches)) { 
    // AES has the key size in it's name as bits 
    $keySize = $matches[1]/8; 

} else { 
    $ivSize = openssl_cipher_iv_length($method); 

    if ($ivSize > 0) { 
     /* 
     * This will fit will with most. 
     * A few might get a larger key than required, but larger is better than smaller 
     * since larger keys just get's downsized rather than padded. 
     * 
     */ 
     $keySize = $ivSize * 2; 

    } else { 
     // Defaults to 128 when IV is not used 
     $keySize = 16; 
    } 
} 

たとえば、

BFは64ビットのブロックサイズを使用し、この場合は128ビットのキーサイズを取得します。それは32ビットを必要とし、最大448ビットを要する。

CAST5は64ビットブロックサイズを使用し、40ビットと128ビットのキーサイズが必要です。この場合、128ビットになります。

これは完璧ではありませんが、機能します。または上記のように、http://php.net/manual/en/function.openssl-get-cipher-methods.phpでサポートされている暗号を常にチェックして、スイッチ内の各キーの最大キーサイズを手動で検索して追加することができます。

関連する問題