我有一些表单输入需要加密才能存储数据库。 我不确定我是否使用了最好的加密。 这是我使用保存在环境文件中的字符串进行加密和解密。
class encrypt
{
public static function encrypt_text($value)
{
if(!$value) return false;
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, env('ENCRYPT_STRING_1'), $value, MCRYPT_MODE_ECB, env('ENCRYPT_STRING_2'));
return trim(base64_encode($crypttext));
}
public static function decrypt_text($value)
{
if(!$value) return false;
$crypttext = base64_decode($value);
$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, env('ENCRYPT_STRING_1'), $crypttext, MCRYPT_MODE_ECB, env('ENCRYPT_STRING_2'));
return trim($decrypttext);
}
}
加密代码有问题。
- 无完整性检查
- Rijndael256 不是 AES(如果你期待它是,对不起,mcrypt 很糟糕)
- 欧洲央行模式 使用
trim()
+ null 填充 -> 如果您尝试使用此方法存储二进制数据,您将在开头和结尾丢失字节- 它使用的是libmcrypt,它是废弃软件,可能会在PHP 7.1中删除 。
回到你找到代码的地方,告诉他们他们教错了你。请参阅此答案以获取更好的替代方案。