13

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

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

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

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

755224
030356
132975
957805
463120
994243
844697
570244
487336
025740

来自 RFC4226 出版物的测试向量(RFC4226 第 32 页

755224
287082
359152
969429
338314
254676
287922
162583
399871
520489

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

4

2 回答 2

6

改变

int otp = binary % DIGITS_POWER[codeDigits];

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

或者

int otp = binary % 1000000;
于 2015-05-22T11:13:23.207 回答
4

对 Math.pow() 的更改没有任何区别,但我认为您可能正在调用 generateOTP() 并将 0 作为 truncationOffset 参数值。尝试使用 -1 给出参考测试向量。

于 2016-08-31T14:39:35.863 回答