Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 加密导致密钥大小无效的错误_Php_Security_Encryption_Mcrypt - Fatal编程技术网

Php 加密导致密钥大小无效的错误

Php 加密导致密钥大小无效的错误,php,security,encryption,mcrypt,Php,Security,Encryption,Mcrypt,我正在创建一个随机密钥,然后我想用一个好的算法对它进行加密,然后我想用这个加密密钥对数据进行加密。我的代码是: $iv=16; //128bits $datakey = base64_encode(openssl_random_pseudo_bytes($iv,$strong)); $datakey = md5($datakey); $finaldata= mcrypt_encrypt(MCRYPT_BLOWFISH, $datakey, $stringtobeencoded, MCRYPT_M

我正在创建一个随机密钥,然后我想用一个好的算法对它进行加密,然后我想用这个加密密钥对数据进行加密。我的代码是:

$iv=16; //128bits
$datakey = base64_encode(openssl_random_pseudo_bytes($iv,$strong));
$datakey = md5($datakey);
$finaldata= mcrypt_encrypt(MCRYPT_BLOWFISH, $datakey, $stringtobeencoded, MCRYPT_MODE_CFB);
错误:

加密模式需要大小为8的初始化向量

如何达到我的要求

我想用一个好的算法加密它

问题中包含的代码片段不安全。我强烈建议:

  • 但你得到的错误是,河豚循环流化床需要一把钥匙和一个静脉注射,而你只提供了一把钥匙

    我想用一个好的算法加密它

    问题中包含的代码片段不安全。我强烈建议:


  • 但是您得到的错误是,Blowfish CFB需要一个密钥和一个IV,而您只提供了一个密钥。

    您的示例有很多内容,因为
    mcrypt.*
    已被弃用,所以本示例使用
    openssl.*
    函数。要跳过IV创建(不太安全但更容易),请使用以下命令:

    $plainText = 'Hello world';
    $key  = 'my-secret-encrpytion-key';
    $algo = 'BF-CFB'; // blowfish cfb
    
    $cypherText = openssl_encrypt($plainText, $algo, $key);
    echo base64_encode($cypherText); // ZTVtdWNMRUp5N1dwZ2NFPQ==
    
    echo openssl_decrypt($cypherText, $algo, $key);
    
    要获得更完整的实现,包括像您在原始问题中尝试的那样生成
    $iv
    ,以下代码将起作用:

    $plainText = 'Hello world';
    $key  = 'my-secret-encrpytion-key';
    $algo = 'BF-CFB'; // blowfish cfb
    
    $ivLen = openssl_cipher_iv_length($algo); // $ivLen = 8
    $iv = openssl_random_pseudo_bytes($ivLen);
    $cypherText = openssl_encrypt($plainText, $algo, $key, 0, $iv);
    
    echo base64_encode($cypherText); // V3JtL1crWHZKL1lEeGJBPQ==
    
    echo openssl_decrypt($cypherText, $algo, $key, 0, $iv);
    

    这是为了更正不正确的变量名而编辑的。

    您的示例有很多内容,因为
    mcrypt.*
    已被弃用,所以本示例使用了
    openssl.*
    函数。要跳过IV创建(不太安全但更容易),请使用以下命令:

    $plainText = 'Hello world';
    $key  = 'my-secret-encrpytion-key';
    $algo = 'BF-CFB'; // blowfish cfb
    
    $cypherText = openssl_encrypt($plainText, $algo, $key);
    echo base64_encode($cypherText); // ZTVtdWNMRUp5N1dwZ2NFPQ==
    
    echo openssl_decrypt($cypherText, $algo, $key);
    
    要获得更完整的实现,包括像您在原始问题中尝试的那样生成
    $iv
    ,以下代码将起作用:

    $plainText = 'Hello world';
    $key  = 'my-secret-encrpytion-key';
    $algo = 'BF-CFB'; // blowfish cfb
    
    $ivLen = openssl_cipher_iv_length($algo); // $ivLen = 8
    $iv = openssl_random_pseudo_bytes($ivLen);
    $cypherText = openssl_encrypt($plainText, $algo, $key, 0, $iv);
    
    echo base64_encode($cypherText); // V3JtL1crWHZKL1lEeGJBPQ==
    
    echo openssl_decrypt($cypherText, $algo, $key, 0, $iv);
    
    这是为了更正不正确的变量名而编辑的。

    实际错误-
    加密模式需要大小为8的初始化向量-
    -不是无效的密钥大小,而是缺少IV

    需要一个IV(初始化向量)。IV大小通常与块大小相同,Blowfish为64位,AES为128位

    通常最好不要使用Blowfish进行加密,即使它的作者现在也使用AES

    在保存密码验证器时,仅使用哈希函数是不够的,仅添加salt对提高安全性几乎没有作用。相反,使用随机盐在HMAC上迭代大约100ms,并使用散列保存盐。最好使用函数,如
    PBKDF2
    Rfc2898DeriveBytes
    Argon2
    password\u hash
    Bcrypt
    或类似函数。使用PHP和,这对代码安全且易于使用。 关键是让攻击者花费大量时间通过暴力手段查找密码

    最好不要使用PHP mcrypt,它是废弃软件,多年来没有更新过,不支持标准PKCS#7(née PKCS#5)填充,只支持非标准的空填充,甚至不能用于二进制数据。mcrypt在2003年就有很多杰出的作品。在PHP7.2中删除了mcrypt扩展。取而代之的是考虑使用或提供完整的解决方案,并保持正确。<> P >实际的错误-<代码>加密模式需要一个大小为8的初始化向量< /代码> -不是一个无效的密钥大小,它是IV.I/P>的缺少。 需要一个IV(初始化向量)。IV大小通常与块大小相同,Blowfish为64位,AES为128位

    通常最好不要使用Blowfish进行加密,即使它的作者现在也使用AES

    在保存密码验证器时,仅使用哈希函数是不够的,仅添加salt对提高安全性几乎没有作用。相反,使用随机盐在HMAC上迭代大约100ms,并使用散列保存盐。最好使用函数,如
    PBKDF2
    Rfc2898DeriveBytes
    Argon2
    password\u hash
    Bcrypt
    或类似函数。使用PHP和,这对代码安全且易于使用。 关键是让攻击者花费大量时间通过暴力手段查找密码


    最好不要使用PHP mcrypt,它是废弃软件,多年来没有更新过,不支持标准PKCS#7(née PKCS#5)填充,只支持非标准的空填充,甚至不能用于二进制数据。mcrypt在2003年就有很多杰出的作品。在PHP7.2中删除了mcrypt扩展。取而代之的是使用或提供完整的解决方案,并保持正确。

    嗨,这里的密码是什么?它的值来自哪里?它说:警告:openssl_encrypt():使用空的初始化向量(iv)可能不安全,不建议在。。。。如何避免这种情况?对不起,应该是
    $algo
    ;您的系统支持的可用算法之一,请参阅使用第二个代码示例中的可能值,以消除空的初始化向量消息。但第二种方法的问题是,它将在每次执行操作时生成随机IV。我必须将IV存储在数据库/文件/注册表中,普通黑客也可以读取它。所以我想先加密密钥和IV,然后再使用它们来加密数据。有什么想法吗?嗨,这里是什么?它的值来自哪里?它说:警告:openssl_encrypt():使用空的初始化向量(iv)可能不安全,不建议在。。。。如何避免这种情况?对不起,应该是
    $algo
    ;您的系统支持的可用算法之一,请参阅使用第二个代码示例中的可能值,以消除空的初始化向量消息。但第二种方法的问题是,它将在每次执行操作时生成随机IV。我必须将IV存储在数据库/文件/注册表中,普通黑客也可以读取它。所以我想要