如何在JavaScript中将otpauth密钥转换为otp pin?

如何在JavaScript中将otpauth密钥转换为otp pin?,javascript,encryption,windows-store-apps,password-protection,one-time-password,Javascript,Encryption,Windows Store Apps,Password Protection,One Time Password,我想编写一个JavaScript应用程序,比如Authy或Google Authentificator。遗憾的是,我没有找到任何关于如何计算实际PIN(一次性密码)的密钥以用于登录的信息 我知道,我必须使用这个密钥和实际的时间戳,但不知道如何组合密钥和时间戳,然后生成Google Authentificator和Authy可以生成的6位OTP 如果我在Google中激活2因素身份验证,我会得到一个QR码,结果是这样的链接 otpauth://totp/Google%3Asome.name%40g

我想编写一个JavaScript应用程序,比如Authy或Google Authentificator。遗憾的是,我没有找到任何关于如何计算实际PIN(一次性密码)的密钥以用于登录的信息

我知道,我必须使用这个密钥和实际的时间戳,但不知道如何组合密钥和时间戳,然后生成Google Authentificator和Authy可以生成的6位OTP

如果我在Google中激活2因素身份验证,我会得到一个QR码,结果是这样的链接

otpauth://totp/Google%3Asome.name%40googlemail.com?secret=x6wup537ptmmohbjkczluxit4r6eppfc&issuer=Google
所以x6wup537ptmmohbjkczluxit4r6eppfc是密钥。我必须做些什么,才能从中获得一个OTP,它实际上可以使用Google帐户登录

致以最良好的问候和感谢,
kaiserkiwi

您可能想要签出,它描述了基于时间的一次性密码算法。

我从搜索结果中找到这个问题,因为我正在寻找一个库,它可以完成(标题中的)问题所要求的功能。经过更多的搜索,我发现一个npm模块可以做到这一点-。如果你看演示,你会看到它给了你一个令牌。从本模块的文档中,您可以看到,为了获得pin,您可以使用:


const-token=authenticator.generate(secret)

谢谢。这似乎正是我当年一直在寻找的。我想我应该搜索我的笔记并开始这个项目:D