加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何减少Asp.Net Identity中的密码重置令牌长度?

发布时间:2020-12-15 07:52:37 所属栏目:百科 来源:网络整理
导读:我使用Asp.Net Identity生成密码重置令牌. string Token = userManager.GeneratePasswordResetToken(userId); 上面的代码给了我一个很长的令牌. 是否可以生成短长度的密码重置令牌? 解决方法 您的密码重置令牌需要加密随机 – 这意味着给定一组使用过的令牌
我使用Asp.Net Identity生成密码重置令牌.
string Token = userManager.GeneratePasswordResetToken(userId);

上面的代码给了我一个很长的令牌.
是否可以生成短长度的密码重置令牌?

解决方法

您的密码重置令牌需要加密随机 – 这意味着给定一组使用过的令牌,下一个令牌应该是无法猜测的.它还需要覆盖一组足够大的可能值,这些暴力尝试所有这些值都是不切实际的慢.

您可以进行更改以使后者使用较小的可能值集合 – 例如,您可以在检查令牌之前向密码重置页面/操作添加1秒延迟.您的用户几乎不会注意到很少使用的页面上的延迟,但攻击者将无法快速尝试大量令牌.

所以,首先你需要获得一个加密随机数:

var random = new byte[8];
using (var rng = System.Security.Cryptography.RandomNumberGenerator.Create())
    rng.GetBytes(random);

我在这里放了8个字节,但你可以根据需要设置它.

接下来,您需要将其变成一个漂亮的可复制粘贴字符串.您可以使用unicode转换执行此操作,但我发现base 64更可靠:

Convert.ToBase64String(random).TrimEnd('=');

使用8个字节将为您提供64位可能的值和10个字符串.使用4将为您提供32位(可能在低安全性站点上进行慢速令牌检查)和5个字符串.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读