尝试加密随机密钥以进行密码重置功能

时间:2014-09-27 16:06:32

标签: c# encryption public-key-encryption

当用户通过输入用户名使用忘记密码字段时,我正在尝试加密随机令牌以存储在用户表中。它还会向更改用户密码页面发送带有URL的电子邮件。这个url将有一个名为'key'的查询字符串参数。

即。 www.mysite.com/Changepassword?key=xfsdfsdffsdfiughjksdf

用户点击该链接后,他们就在此页面上。我有一个函数将通过ResetToken获取用户。如果找到用户则继续。

我需要一些建议:

  1. 我应该使用什么样的随机令牌/加密技术 确保没有人可以进入Changepassword页面并猜出一个密钥 并且能够更改用户密码。
  2. 我将如何处理这个关键网址友好?

1 个答案:

答案 0 :(得分:1)

如果您想要超级安全,可以使用cryptographically secure random number generator。转换为十六进制是确保其网址安全的最简单方法:

byte[] bytes = new byte[8];
using (var rng = RandomNumberGenerator.Create())
{
    rng.GetBytes(bytes);
}
string key = string.Join("", bytes.Select(b => b.ToString("X2")));

编辑请记住,电子邮件可能不安全,因此在到达收件人之前,您的邮件可能会被恶意第三方拦截(但不太可能)。