首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用可以在客户端上进行身份验证的system.security.cryptography生成OTP?

问如何使用可以在客户端上进行身份验证的system.security.cryptography生成OTP?
EN

Stack Overflow用户
提问于 2010-09-12 04:24:50
回答 1查看 4K关注 0票数 3

有人知道我在哪里可以找到带有system.security.cryptography命名空间的示例代码--或者开发人员可以遵循的指令?

其目的是为asp.net网站添加双因素身份验证。在网站上,我想要求用户输入一个密码(类似于他们从键盘上获得的密码)。在客户端,我想提供一个生成正确密码的vb.net windows.forms程序。

我想用一个小规模的system.security.cryptography命名空间来完成这个任务。我正在寻找示例代码,我不想搅乱设备或购买身份验证服务器设备。

大多数算法都需要一个高级的数学学位,或者是其他平台,如Linux或PHP。我在找.net等价物。

EN

回答 1

Stack Overflow用户

发布于 2010-09-13 14:05:39

RFC4226 (基于计数器的OTP)或草案-mraihi-totp-基于时间的 (基于时间的OTP)的密码部分相对简单:

  1. 根据共享密钥和计数器/时间生成HMAC。
  2. 以安全的方式截断它

通常是用户管理和静态/动态同步使其变得复杂。

像这样的事情应该有效:

代码语言:javascript
复制
public static int CalculateHotp(byte[] key, byte[] counter)
{
    var hmacsha1 = new HMACSHA1(key);
    byte[] hmac_result = hmacsha1.ComputeHash(counter);
    int offset = hmac_result[19] & 0x0f;
    int bin_code = (hmac_result[offset]  & 0x7f) << 24
                   | (hmac_result[offset+1] & 0xff) << 16
                   | (hmac_result[offset+2] & 0xff) <<  8
                   | (hmac_result[offset+3] & 0xff);
    int hotp = bin_code % 1000000;
    return hotp;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3693741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档