这是将字符串加密到数据库中的好形式吗?


Is this a good form of encrypting a string into a database?

我有一些表单输入需要加密才能存储数据库。 我不确定我是否使用了最好的加密。 这是我使用保存在环境文件中的字符串进行加密和解密。

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中删除

回到你找到代码的地方,告诉他们他们教错了你。请参阅此答案以获取更好的替代方案。