首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用HOTP生成字母数字OTP

用HOTP生成字母数字OTP
EN

Stack Overflow用户
提问于 2016-08-17 11:57:46
回答 2查看 1.4K关注 0票数 1

我知道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

我在我的测试中使用了下面的示例实现,它运行得很好:

https://svn.forgerock.org/openam/tags/10.0.0-docs/products/amserver/source/com/sun/identity/authentication/modules/hotp/HOTPAlgorithm.java

我的问题是,是否可以使用HOTP而不是数字生成字母数字OTP。其优点显然是,在给定的长度内,OTP的强度会增加多倍。因此,一个8位字母数字代码远比一个8位数字数字代码的字符串。

EN

回答 2

Stack Overflow用户

发布于 2016-08-17 16:38:24

当然,在HMAC(K,C)之后,你可以做你想做的任何事情。你可以把它映射到HEX或者字母数字。

但是,您还必须创建自己的OTP令牌--硬件令牌或智能手机应用程序。这是标准的伟大之处,你不必创建自己的标准!

票数 1
EN

Stack Overflow用户

发布于 2016-08-20 14:50:02

字母数字有一个复杂的基础,基础是62。如果允许再使用两个字符,则只需使用基64 (将+/替换为您喜欢的任何值)。

否则,只需查找Base编码库,例如this one for (没有尝试,不能评论正确性或性能)。

这不会影响安全性,因为生成的HOTP比特和给定的表示之间存在1:1的关系。换句话说,不同的基本表示形式和字母表只是对相同位值的不同视图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38995991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档