我试图复制HOTPAlgorithm.java代码(HOTPAlgorithm.java),并将其与官方的HOTP 4226的示例实现(RFC4226第27页)进行比较,该示例实现在正式的RFC4226文档第27页中找到。HOTPAlgorithm.java和RFC4226中的实现都是由同一个作者编写的,作者是Loren,并设置为1.0版。从我的比较来看,这两种代码本质上是相同的。
我尝试为6位HOTP代码运行测试向量(而不修改HOTPAlgorithm.java脚本),并注意到RFC4226和HOTPAlgorithm.java中给出的源代码针对发布的具有完全相同设置的RFC4226结果产生不同的测试向量结果。
RFC4226示例Java代码和HOTPAlogrithm.java发布的Java代码与RFC4226测试向量相比是否存在差异?
HOTPAlgorithm.java和RFC4226代码的测试结果(两者产生相同的结果):
755224
030356
132975
957805
463120
994243
844697
570244
487336
025740来自RFC4226发布的测试向量(RFC4226第32页)
755224
287082
359152
969429
338314
254676
287922
162583
399871
520489我是不是遗漏了什么,或者官方公布的样本代码和官方公布的结果之间是否有差异?
发布于 2015-05-22 11:13:23
变化
int otp = binary % DIGITS_POWER[codeDigits];至
int otp = (int) (binary % Math.pow(10, codeDigits));或
int otp = binary % 1000000;发布于 2016-08-31 14:39:35
对Math.pow()的更改没有起到任何作用,但我认为您可能是以0作为truncationOffset参数值调用generateOTP()。试着用-1给出参考测试向量。
https://stackoverflow.com/questions/30392008
复制相似问题