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でサポートされている暗号を常にチェックして、スイッチ内の各キーの最大キーサイズを手動で検索して追加することができます。