#java #encoding #base45
Вопрос:
Я с большим интересом слежу за проектом цифрового сертификата covid на java: https://github.com/ehn-dcc-development/
Более конкретно, для Java и для декодирования пропуска: https://github.com/GaetanoPiazzolla/greenpass-decode
Используя этот код, для декодирования строки base45, которую мы считываем с QR-кода, у нас есть:
byte[] bytecompressed = Base45.getDecoder().decode(withoutPrefix);
Я хотел бы закодировать ту же самую строку обратно, поэтому я пытаюсь сделать следующее:
byte[] byteCompressedNew = Base45.getEncoder().encode(bytecompressed);
Но это приводит к следующей ошибке:
Исключение в потоке «основной» java.lang.Исключение ArrayIndexOutOfBoundsException: индекс -23 выходит за рамки длины 45 при nl.minvws.кодировке.Base45$Кодировщик.кодирование(Base45.java:74)
В этой строке кода в модуле base45:
result[resultIndex ] = toBase45[value % 45];
Было бы здорово, если бы вы помогли мне понять, что я делаю не так.
Большое спасибо!
Комментарии:
1. Откуда это
Base45
берется?...
Понял: github.com/ehn-dcc-development/base45-java/blob/master/src/main/…2. Я не заглядывал в связанный код, но значение байта подписано -128 до 127. И -23 % 45 = -23. Это должно было быть 45-23 = 22. Добавление 256 к отрицательным числам.
3. @JoopEggen Похоже, что для этого уже есть проблема с GitHub? github.com/ehn-dcc-development/base45-java/issues/2
Ответ №1:
Вам необходимо обновить свою зависимость с версии 0.0.2 до 0.0.3 (выпущена 6 апреля 2021 года с исправлением ошибки именно для этой проблемы).
io.github.ehn-digital-green-development:base45:0.0.3
Для maven:
<dependency>
<groupId>io.github.ehn-digital-green-development</groupId>
<artifactId>base45</artifactId>
<version>0.0.3</version>
</dependency>