加密会导致无效密钥大小出错

ITS*_*gar 1 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_MODE_CFB);
Run Code Online (Sandbox Code Playgroud)

错误:

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

如何完成我的要求?

Sco*_*ski 11

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

您在问题中包含的代码段不安全.我强烈推荐:

  1. 不要使用mcrypt.
  2. 有关如何安全加密,请参阅此链接答案中的示例代码.

但是你得到的错误是Blowfish-CFB期望一个密钥和一个IV,你只提供了一个密钥.


zap*_*aph 6

实际错误Encryption mode requires an initialization vector of size 8- 不是无效的密钥大小,而是缺少IV.

CFB模式需要IV(初始化矢量).IV大小通常与块大小相同,Blowfish为64位,AES为128位.

通常最好不要使用Blowfish进行加密,即使其作者最近使用AES也是如此.

仅使用哈希函数保存密码验证程序是不够的,只添加一个盐对提高安全性几乎没有作用.而是使用随机盐在HMAC上迭代大约100毫秒的持续时间并使用散列保存盐.更好的是使用功能,例如PBKDF2,Rfc2898DeriveBytes,Argon2,password_hash,Bcrypt或类似的功能.随着PHP的使用password_hashpassword_verify,一对是安全和易于使用.关键是要让攻击者花大量时间通过蛮力来查找密码.

最好不要使用PHP mcrypt,它是abandonware,多年来一直没有更新,不支持标准的PKCS#7(néePKCS#5)填充,只有非标准的空填充,甚至不能用于二进制数据.mcrypt有很多可以追溯到2003年的漏洞.在PHP 7.2中删除了不推荐使用的mcrypt-extension.相反,考虑使用defuseRNCryptor,它们提供了一个完整的解决方案,并且正在维护并且是正确的.