【问题标题】:What is the best way to encode informations in mysql database? Not just passwords [duplicate]在 mysql 数据库中编码信息的最佳方法是什么?不仅仅是密码[重复]
【发布时间】:2019-10-29 19:00:22
【问题描述】:

我想构建一个 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");
    }
  }
}

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

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

【问题讨论】:

  • 是的,如果你加密了数据库中的数据,你就不能再查询了。这是一个权衡。对你来说必要的权衡取决于你到底需要什么以及你可以放弃什么。
  • 谢谢!我需要知道我是否有信息音调,这会减慢我的应用程序吗?
  • 密码不应该被加密,因为加密是可逆的。必须通过单向散列算法保护密码。请参阅重复主题以获取答案。
  • “请参阅重复的主题以获取答案。” 重复的内容并不完全“正确”,因为它有点“过时”@Shadow 这个Safe Password Hashing 是什么topicstarter 应该阅读关于 .. 但你对其余部分是正确的。

标签: php mysql encryption


【解决方案1】:

您可以使用简单地在 php 中实现的散列技术来代替这个函数 例如 md5(您必须加密的文本) 并存储在数据库中 在检查输入的创建哈希并在数据库中使用哈希检查输入的哈希

【讨论】:

  • 谢谢。使用这种技术如果有人窃取了我的数据库,是否能够解密它?
  • 散列算法是一种方法——没有办法解密它们。这些对加密任何东西都没有用。为了保护密码,您可以使用散列算法,但 md5 已过时,不应使用。
  • “为了保护密码,您可以使用散列算法,但 md5 已过时,不应使用。” @Shadow 我什至不信任 SHA256 或 SHA512(使用或没有盐)用于单向密码散列,因为它们只是为了快速运行而设计的。这意味着在 CPU 或 GPU 上,这些散列算法可以很容易地被暴力破解或用于生成彩虹表
猜你喜欢
  • 2013-01-25
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 2011-11-18
  • 2017-08-02
  • 2014-01-15
  • 1970-01-01
  • 2011-07-16
相关资源
最近更新 更多