【发布时间】: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