Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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
.net 如何使用system.security.cryptography生成可以在客户端进行身份验证的OTP?_.net_Cryptography_One Time Password_System.security - Fatal编程技术网

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

.net 如何使用system.security.cryptography生成可以在客户端进行身份验证的OTP?,.net,cryptography,one-time-password,system.security,.net,Cryptography,One Time Password,System.security,有人知道我在哪里可以找到system.security.cryptography命名空间的示例代码,或者开发人员可以遵循的指令吗 目的是向asp.net网站添加双因素身份验证。在这个网站上,我想让用户输入一个密码(类似于他们从键盘上得到的密码)。在客户端,我想提供一个生成正确密码的vb.net windows.forms程序 我希望在小范围内使用system.security.cryptography命名空间来实现这一点。我正在寻找示例代码,我不想弄乱设备或购买身份验证服务器设备 大多数算法都需

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

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

我希望在小范围内使用system.security.cryptography命名空间来实现这一点。我正在寻找示例代码,我不想弄乱设备或购买身份验证服务器设备


大多数算法都需要数学专业的高级学位,或者适用于其他平台,如Linux或PHP。我正在寻找.net的等价物。

基于计数器的OTP或(基于时间的OTP)的加密部分相对简单:

  • 根据共享密钥和计数器/时间生成HMAC
  • 以安全的方式截断它
  • 通常是用户管理和静态/动态同步使其变得复杂

    像这样的方法应该会奏效:

    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;
    }
    
    publicstaticintcalculatehotp(字节[]键,字节[]计数器)
    {
    var hmacsha1=新的hmacsha1(键);
    字节[]hmac_result=hmacsha1.ComputeHash(计数器);
    int offset=hmac_结果[19]&0x0f;
    
    int bin_code=(hmac_result[offset]&0x7f)为什么需要这个?我认为可能会有更好的解决方案,如果您提供更多信息,您可能会获得更好的安全性和解决方案。要向asp.net网站添加双因素身份验证,我想在网站上要求用户输入密码(类似于他们从键盘上获得密码)。在客户端,我想提供一个生成正确密码的vb.net windows.forms程序。我想使用system.security.cryptography命名空间执行此操作。我正在寻找示例代码。谢谢,但是在.net中如何使用system.security.cryptography执行此操作?pghcpa:看看这个