我知道HOTP可以用来创建一个数字的一次密码。背后的算法是:
K是一个秘密钥匙 C是个柜台 HMAC(K,C) = SHA1(K⊕0x5c5c…)SHA1(K⊕0x3636…)∥C),⊕作为异或,∥作为连接,(C是消息)
截断是一个函数,它以一种定义的方式从HMAC结果中选择4个字节。
然后HOTP(K,C)的数学定义如下:
HOTP(K,C) =截断(HMAC(K,C)) &0x7FFFFFF
我在我的测试中使用了下面的示例实现,它运行得很好:
我的问题是,是否可以使用HOTP而不是数字生成字母数字OTP。其优点显然是,在给定的长度内,OTP的强度会增加多倍。因此,一个8位字母数字代码远比一个8位数字数字代码的字符串。
发布于 2016-08-17 16:38:24
当然,在HMAC(K,C)之后,你可以做你想做的任何事情。你可以把它映射到HEX或者字母数字。
但是,您还必须创建自己的OTP令牌--硬件令牌或智能手机应用程序。这是标准的伟大之处,你不必创建自己的标准!
发布于 2016-08-20 14:50:02
字母数字有一个复杂的基础,基础是62。如果允许再使用两个字符,则只需使用基64 (将+和/替换为您喜欢的任何值)。
否则,只需查找Base编码库,例如this one for (没有尝试,不能评论正确性或性能)。
这不会影响安全性,因为生成的HOTP比特和给定的表示之间存在1:1的关系。换句话说,不同的基本表示形式和字母表只是对相同位值的不同视图。
https://stackoverflow.com/questions/38995991
复制相似问题