如何在MySQL中存储基于时间的OTP秘密密钥

时间:2019-04-23 06:10:17

标签: php mysql

小时前,我发布了此内容:Is storing secret key as a plaintext in SQL a bad move?

我认为我的问题和总结不够清楚。我指的是基于时间的OTP的密钥,而不是常规密码。是的,我有password_hash()-ed密码,但没有密钥。 Authy或Google Authenticator可以使用生成的密钥,每30秒显示一次当前的OTP。除非你们也告诉我也对我的密钥进行哈希处理,否则我不明白为什么我的问题是重复的。

关于Dat的评论,我看不到otplib(javascript库)如何为我提供帮助,因为我仍然需要一个不同的随机密钥来绑定到不同的个人帐户,除非我对所有帐户都使用相同的密钥帐户。另外,我需要一种方法来记下哪个密钥链接到哪个帐户,因此回到我的主要问题,即如何安全地存储密钥,以便每当一个帐户尝试使用OTP登录时,我都可以对其进行验证。 / p>

对于造成的麻烦,我深表歉意。

1 个答案:

答案 0 :(得分:1)

我了解您的问题。按照otplib的说明,我认为这是您需要存储的内容

import crypto from 'crypto';

authenticator.options = { crypto };

// Or if you're using the other OTP methods
// hotp.options = { crypto }
// totp.options = { crypto }

const secret = 'KVKFKRCPNZQUYMLXOVYDSQKJKZDTSRLD' <--- This is what you need to store, right ?
const token = authenticator.generate(secret); // 556443

通常这个秘密密钥是通过您的用户ID + YOUR_PRIVATE_SECRET_KEY

生成的

YOUR_PRIVATE_SECRET_KEY是后端环境中的密钥注入