小编der*_*her的帖子

使用 otp.net 生成和验证 OTP 代码

我正在使用Otp.NET库来生成和验证 OTP。我想使用TOTP算法。生成的 OTP 有效期需为 5 分钟。图书馆建议var totp = new Totp(secretKey, step: 300);为此使用。但是OTP在5分钟之前就失效了

完整代码

public static void GenarateTOTP()
        {
            var bytes = Base32Encoding.ToBytes("JBSWY3DPEHPK3PXP");

            var totp = new Totp(bytes, step: 300);

            var result = totp.ComputeTotp(DateTime.UtcNow);

            Console.WriteLine(result);

            var input = Console.ReadLine();
            long timeStepMatched;
            bool verify = totp.VerifyTotp(input, out timeStepMatched, window: null);

            Console.WriteLine("{0}-:{1}", "timeStepMatched",timeStepMatched);
            Console.WriteLine("{0}-:{1}", "Remaining seconds", totp.RemainingSeconds());
            Console.WriteLine("{0}-:{1}", "verify", verify);

        } 
Run Code Online (Sandbox Code Playgroud)

c# one-time-password two-factor-authentication totp

9
推荐指数
1
解决办法
2万
查看次数

C3859:超出了PCH的虚拟内存范围

我不时(并非每次)都收到此错误消息,我在混合模式项目中进行了编译(编辑:对不起,我在这里并没有明确指出:我的意思是“重建”)。而且Visual Studio告诉我“使用'-Zm114'或更高版本的命令行选项重新编译”。原则上没问题,我只是按照VS告诉我的那样做。

但是目前,这有两个问题:

  1. 为什么在每次重建时不会发生?如果我理解正确,则编译器在编译项目时会耗尽内存。因此,如果我进行重建以清理所有先前的工作,如果我什么都没做,它下次是否也不会耗尽内存?

  2. 为了安全起见,我已经Zm120在该项目的所有配置中为Zm(即)指定了120的值。为什么我收到一个错误消息,该值较低?还是114的建议值只是对VS的疯狂猜测?

c++ mixed-mode compiler-errors precompiled-headers visual-studio-2015

5
推荐指数
1
解决办法
5573
查看次数

Android Webview中的语言环境时间错误

我们有一个android应用,它或多或少地只包含一个webview,显示一个webapp。在某个时候,我们想向用户显示一些时间戳,并使用以下代码

let dateString = new Date().toLocaleTimeString();
Run Code Online (Sandbox Code Playgroud)

问题是,即使我们将设备设置为使用24h时钟(并且设备确实遵守此设置,因为我们看到的是正确的时间),这也始终会产生12h的时间表示(例如,以AM / PM 3:15 PM代替15:15)。状态栏)。我们还将设备设置为使用德语,并删除了英语设置。也没有运气。使用设备的语言环境,因为我们的应用以正确的语言显示,但是时间字符串仍然错误。

window.navigator.language  -> "de-AT"
new Date().toLocaleTimeString(); -> "6:10:13 PM"
new Date().toLocaleTimeString(window.navigator.language); -> "18:10:32"
Run Code Online (Sandbox Code Playgroud)

乍一看,最后一行似乎是一种可能的解决方法,但是如果语言是“ en-US”,则它将始终返回12h格式,无论os是否配置为使用24h时钟。

我知道这个问题,似乎与这个问题有某种联系,但是答案对我们不起作用。

使用我发现的各种虚拟设备,它仍然可以在chrome 58(在API 26上)上正常工作,但在chrome 61(在API 27上)上不能再使用。目前在chrome 70 beta上进行测试,问题仍然存在。

还需要注意的是,它在chrome本身中可以正常工作(即,如果我在测试网站中显示时间戳,则使用系统设置),但仅在webview中失败。

我们当前的解决方法是通过本机应用程序生成时间戳,但这似乎很笨拙。

更新

我知道我可以在网络应用程序方面做一些事情,例如覆盖toLocaleTimeString(实际上,我已经从本地应用程序中获取了正确的格式)。

我的问题更多是关于:本机中是否存在任何已知的已更改行为(可能是更改此操作的设置),WebView从而导致发生此问题,因为在Chrome <= 58的设备上,此方法的工作原理/魅力很大。

同时,我提出了铬的问题,他们能够复制它。也许这将在下一版本中得到解决...

更新2

该问题已经在Google方面解决,并且可能会在以后的更新中推出。在此期间,我将继续使用我的当前替代,将toLocaleTimeString()其调用回本机应用程序...

javascript android locale google-chrome webview

5
推荐指数
1
解决办法
402
查看次数

删除对象最上面的键?

是否可以压平或移除对象最上面的键?例如:

const obj = {
  page: {
    title: 'x',
    images: {
      0: {
        src: '...'
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

所以我可以得到:

{
  title: 'x',
  images: {
    0: {
      src: '...'
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过,map但结果不是我想要的:

const obj = {
  page: {
    title: 'x',
    images: {
      0: {
        src: '...'
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

javascript

2
推荐指数
1
解决办法
91
查看次数

按 STRING 参数对 C# 对象列表进行排序

我有一个类对象列表ListUser。我需要能够传入一个字符串值,并使用文本表达式按该列按升序或降序排列。我所看到的所有使用 Lambda 表达式的东西都将对象属性作为强类型值,如何通过添加“名字降序”作为参数来实现这一点?

代码如下

namespace SortLists
{

  class ListUser
  {
    public int id { get; set; }
    public string firstname { get; set; }
    public string lastname { get; set; }
    public string company { get; set; }
    public string phonenumber { get; set; }
  }

  class Program
  {
     static void Main(string[] args)
     {
        var user1 = new ListUser() { id = 1, firstname = "James", lastname = "Smith", company = "Code Logic", phonenumber = "01235 566 456" …
Run Code Online (Sandbox Code Playgroud)

c# sorting ienumerable

1
推荐指数
1
解决办法
3764
查看次数