Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Md5 什么';用户登录我的程序时,我能使用的最安全的加密是什么?_Md5 - Fatal编程技术网

Md5 什么';用户登录我的程序时,我能使用的最安全的加密是什么?

Md5 什么';用户登录我的程序时,我能使用的最安全的加密是什么?,md5,Md5,我正在编写一个程序,在它加载之前,我希望用户输入正确的密码,而不将密码存储在我的代码中的任何地方。我以前实现过MD5哈希,但据我所知,它们已经过时,可能会被破坏。有一些网站试图进行逆向工程和MD5哈希。我可以使用什么最强大的加密来防止窥探我的程序(例如NSA)?存储用户密码时,加密不是正确的做法,因为通过设计,加密的密码可以被解密。正如你所说的,散列是一种方法 MD5已经过时,我认为当前的建议是sha1 请注意,有一些方法可以将任何哈希算法反转为可接受的输入。使这一点更加困难的普遍接受的标准是在

我正在编写一个程序,在它加载之前,我希望用户输入正确的密码,而不将密码存储在我的代码中的任何地方。我以前实现过MD5哈希,但据我所知,它们已经过时,可能会被破坏。有一些网站试图进行逆向工程和MD5哈希。我可以使用什么最强大的加密来防止窥探我的程序(例如NSA)?

存储用户密码时,加密不是正确的做法,因为通过设计,加密的密码可以被解密。正如你所说的,散列是一种方法

MD5已经过时,我认为当前的建议是sha1

请注意,有一些方法可以将任何哈希算法反转为可接受的输入。使这一点更加困难的普遍接受的标准是在所有密码通过哈希函数之前添加一个唯一的“salt”。向密码添加salt时的一个常见错误是对数据库中的每个密码使用相同的salt值

添加密码时,请使用唯一的值,例如用户ID,或为用户记录创建的日期/时间字符串。这将防止基于rainbow表的攻击,因为存储的密码散列不会有现成的rainbow表

我个人喜欢使用用户创建的日期/时间字符串的方法,因为它是一个永远不会更改的值,并且对于数据库中的每个用户都是可用的,并且可能是不同的

下面的例子假设您熟悉PHP,但是这些概念可以应用于任何语言

例如: 在将新用户保存到数据库中之前:

$date = date('Y-m-d H:i:s');
// save this same value into the user record somewhere

$passwordHash = sha1($user['created_date'].$_POST['password']);
// and save the $passwordHash value into the password field for that user
要验证登录尝试,请使用类似以下内容:

function authenticateUserLogin($email, $password) {
    $user = $db->fetchRow('SELECT * FROM users WHERE email=?', array($email));
    if (!$user) return false;
    $passwordHash = sha1($user['created_date'].$password);
    return $user['password_hash'] !== $passwordHash;
}
要更新现有用户密码,请使用以下命令

$passwordHash = sha1($user['date_created'].$newPassword);
$db->query('UPDATE users set password_hash=? WHERE id = ?', array($passwordHash, $user['id']));

如果您处于这种环境中,并且如果您在一个封闭的基于windows的域上,您是否考虑过集成身份验证?这样,验证服务器可以在您的代码之外更新,从而降低成本,这可能会吸引业务。SHA呢?到目前为止,它还没有被违反感谢您的回答Andrew,但我无法理解。也许我会用SHA。我相信我能找到一些例子。谢谢你。这个问题似乎离题了,因为它是关于信息安全的,因此更适合你。谢谢你的回答joel。我见过添加盐的例子。这就是我要走的路。