java - RFC4226 HOTP Java 实现

标签 java one-time-password hmacsha1

我尝试复制 HOTPAlgorithm.java 代码 ( HOTPAlgorithm.java ) 并将其与官方 RFC4226 文档第 27 页上的官方 HOTP RFC 4226 示例实现 ( RFC4226 Page 27 ) 进行比较。 HOTPAlgorithm.java 和 RFC4226 中的实现均由同一作者 Loren Hart 编写并设置为 1.0 版。从我的比较来看,这两个代码本质上是相同的。

我尝试为 6 位 HOTP 代码运行测试 vector (不修改 HOTPAlgorithm.java 脚本)并注意到 RFC4226 和 HOTPAlgorithm.java 中给出的源代码产生了与发布的 RFC4226 结果完全不同的测试 vector 结果相同的设置。

与 RFC4226 测试 vector 相比,RFC4226 示例 Java 代码和 HOTPAlogrithm.java 发布的 Java 代码是否存在差异?

来自 HOTPAlgorithm.java 和 RFC4226 Java 代码的测试结果(都产生相同的结果):

755224
030356
132975
957805
463120
994243
844697
570244
487336
025740

来自 RFC4226 出版物的测试 vector (RFC4226 Page 32)

755224
287082
359152
969429
338314
254676
287922
162583
399871
520489

我是否遗漏了什么或官方发布的示例代码与官方发布的结果之间是否存在差异?

最佳答案

改变

int otp = binary % DIGITS_POWER[codeDigits];

int otp = (int) (binary % Math.pow(10, codeDigits));

或者

int otp = binary % 1000000;

关于java - RFC4226 HOTP Java 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30392008/

相关文章:

javascript - hash_hmac 在 php 中有 3 个参数,相当于 csharp,javascript

c# - 尝试使用 C#.Net 编码 HMAC-SHA256

java - 为什么没有作业在hadoop上运行

java - 如何使用 UTF-8 读取 InputStream?

java - Oracle Java - 将可选日期参数添加到准备好的语句中

Java - 更新在 Swing 中制作的 GUI

ios - 无效的条形码 - Google Authenticator - iOS - 用 = 填充

java - OTP 和 SMS 网关实现涉及哪些步骤和流程

c# - 在 C# 中检查没有 key 的 HMAC-SHA1

java - 获取相同的双因素代码,就像我在 JAVA 中的 App Authy 中收到的一样