我尝试复制 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/