openssl_cipher_iv_length

(PHP 5 >= 5.3.3, PHP 7, PHP 8)

openssl_cipher_iv_length获取密码iv长度

说明

openssl_cipher_iv_length ( string $method ) : int

获取密码初始化向量(iv)长度。

参数

method

密码的方法,更多值查看 openssl_get_cipher_methods() 函数。

返回值

成功,返回密码长度, 失败返回 false .

错误/异常

当密码方法未知时,抛出一个E_WARNING 级的错误。

范例

Example #1 openssl_cipher_iv_length() 范例

<?php
$method 
'AES-128-CBC';
$ivlen openssl_cipher_iv_length($method);

echo 
$ivlen;
?>

以上例程的输出类似于:

16

User Contributed Notes

Vee W. 07-Apr-2018 04:30
<?php
$ciphers
= openssl_get_cipher_methods();

//ECB mode should be avoided
$ciphers = array_filter($ciphers, function ($n) {
    return
stripos($n, "ecb") === FALSE;
});
   
// At least as early as Aug 2016, Openssl declared the following weak: RC2, RC4, DES, 3DES, MD5 based
$ciphers = array_filter($ciphers, function ($c) {
    return
stripos($c, "des") === FALSE;
});
$ciphers = array_filter($ciphers, function ($c) {
    return
stripos($c, "rc2") === FALSE;
});
$ciphers = array_filter($ciphers, function ($c) {
    return
stripos($c, "rc4") === FALSE;
});
$ciphers = array_filter($ciphers, function ($c) {
    return
stripos($c, "md5") === FALSE;
});

if (
is_array($ciphers)) {
    foreach (
$ciphers as $cipher) {
        echo
$cipher.': ';
        echo
openssl_cipher_iv_length($cipher);
        echo
"<br>\n";
    }
}
?>

Will be...
AES-xxx-xxx is 16
BF-xxx is 8
CAMELLIA-xxx is 16
CAST5-xxx is 8
IDEA-xxx is 8
SEED-xxx is 16

lower case:
aes-xxx-xxx are mixed between 16 and 12.
id-aes-xxx are mixed between 12 and 8.
The values above are tested with PHP 5.5 - 5.6 on Windows. In PHP 7.x is different than this.
Tim Hunt 10-Dec-2014 05:37
The return value is a length in bytes. (Not bits, or anything else.)