在mysql数据库中编码信息的最佳方法是什么?不只是密码

时间:2019-06-15 11:40:53

标签: php mysql encryption

我想构建一个可以存储患者信息的php应用程序。我在互联网上发现了两个功能。一种用于加密,另一种用于解密,但是我遇到了一些问题。

这是一个例子。我需要以这种方式存储信息的色调。 我需要知道这是否会使我的应用变慢。

function encryptthis($data, $key) {
  $encryption_key = base64_decode($key);
  $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
  $encrypted = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv);
  return base64_encode($encrypted . '::' . $iv);
}

function decryptthis($data, $key) {
  $encryption_key = base64_decode($key);
  list($encrypted_data, $iv) = array_pad(explode('::', base64_decode($data), 2),2,null);
  return openssl_decrypt($encrypted_data, 'aes-256-cbc', $encryption_key, 0, $iv);
}

if(isset($_POST['login'])){
  $username = $_POST['username'];
  $password = $_POST['password'];

  $usrEncr = encryptthis($username, $key);
  $pswEncr = encryptthis($password, $key);

  $users = DB::query('SELECT * FROM users');

  foreach ($users as $user) {
      if(decryptthis($user['username'], $key) == $username && decryptthis($user['password'], $key) == $password){

      $user = array(
        'id' => $user['id'],
        'name' => $user['username']
      );

      setcookie("loginCredentials", json_encode($user), time() + 7200); 
      header("Refresh:0");
    }
  }
}

我必须选择所有用户并解密所有用户名和密码,以查看是否与给定的用户名和密码匹配,因为每次我加密相同的单词时,加密的字符串都是不同的。

这是一种安全的方法吗? 对不起,我的英语不好。

1 个答案:

答案 0 :(得分:-2)

您可以使用仅在php中实现的哈希技术来代替此功能 例如 md5(您必须加密的文本) 并存储在数据库中 在检查创建输入的哈希并在db中用哈希检查输入的哈希