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的初始化向量
如何完成我的要求?
实际错误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_hash和password_verify,一对是安全和易于使用.关键是要让攻击者花大量时间通过蛮力来查找密码.
最好不要使用PHP mcrypt,它是abandonware,多年来一直没有更新,不支持标准的PKCS#7(néePKCS#5)填充,只有非标准的空填充,甚至不能用于二进制数据.mcrypt有很多可以追溯到2003年的漏洞.在PHP 7.2中删除了不推荐使用的mcrypt-extension.相反,考虑使用defuse或RNCryptor,它们提供了一个完整的解决方案,并且正在维护并且是正确的.