【发布时间】:2021-08-21 20:36:22
【问题描述】:
我非常感兴趣地关注 java 中的数字 covid 证书项目: https://github.com/ehn-dcc-development/
更具体地说,对于 Java 和解码通行证: https://github.com/GaetanoPiazzolla/greenpass-decode
使用此代码,解码我们从二维码读取的 base45 字符串,我们有:
byte[] bytecompressed = Base45.getDecoder().decode(withoutPrefix);
我想将这个相同的字符串编码回来,所以我正在尝试以下操作:
byte[] byteCompressedNew = Base45.getEncoder().encode(bytecompressed);
但这会导致以下错误:
线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常: 索引 -23 超出范围,长度为 45 nl.minvws.encoding.Base45$Encoder.encode(Base45.java:74)
base45模块中的这行代码:
result[resultIndex++] = toBase45[value % 45];
如果你能帮助我理解我做错了什么,那就太好了。
非常感谢!
【问题讨论】:
-
Base45来自哪里?...知道了:github.com/ehn-dcc-development/base45-java/blob/master/src/main/… -
我没有查看链接代码,但字节值的符号为 -128 到 127。并且 -23 % 45 = -23。应该是 45-23 = 22。负数加上 256。
-
@JoopEggen 看起来已经有 GitHub 问题了? github.com/ehn-dcc-development/base45-java/issues/2