Статус: Новичок
Группы: Участники
Зарегистрирован: 30.09.2022(UTC) Сообщений: 2
|
Добрый день, используем signal-com-jcp:3.1.2 и при дешифровании c использованием GOST28147PRNG PKCS#8 получаем ошибку: Caused by: java.lang.IllegalArgumentException: too long data: 4000256 at ru.signalcom.crypto.e.a.c(Unknown Source) at ru.signalcom.crypto.e.h.a(Unknown Source) at ru.signalcom.crypto.d.a(Unknown Source) at ru.signalcom.crypto.provider.JCEBlockCipher.engineUpdate(Unknown Source) at java.base/javax.crypto.Cipher.update(Cipher.java:1985) at java.base/javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:158) at java.base/javax.crypto.CipherInputStream.read(CipherInputStream.java:261) at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:244) at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:284) at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:343) at ru.signalcom.cms.v.read(Unknown Source) at java.base/java.io.InputStream.transferTo(InputStream.java:782)
Из байткода не понятно что за число 4000256, когда как верхняя граница судя по байт коду 4000000 public final int c(byte[] var1, int var2, byte[] var3, int var4, int var5) { int var6 = 0; if (this.h == 0) { this.i += var5; if (this.i > 4000000) { throw new IllegalArgumentException("too long data: " + this.i); } else { return this.b(var1, var2, var3, var4, var5); }
Дешифруется небольшой файл - 14мб. Используя автогенеренные ключи, удавалось дешифровывать файлы большего размера.
Подскажите в чем может быть проблема, спасибо.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. Что используете при зашифровании? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 30.09.2022(UTC) Сообщений: 2
|
Добрый день, не имею возможности узнать ПО, которым проводится зашифрование. Могу лишь только сказать что на вход получаем файл с 1.3.6.1.4.1.5849.1.1.3 oid для алгоритма шифрования. Код дешифрации выглядит следующим образом
val contentInfoParser = ContentInfoParser.getInstance(inputStream) if (contentInfoParser !is EnvelopedDataParser) { throw CryptographyException("EnvelopedData expected here") } val recInfos = contentInfoParser.recipientInfos as ArrayList<RecipientInfo?> for (recInfo in recInfos) { val content = recInfo!!.getEncryptedContent(privateKey, this.secureRandom) val bOut = ByteArrayOutputStream() content.transferTo(bOut) contentInfoParser.close() return bOut.toByteArray() } inputStream - набор байт из входного файла. Падает код в content.transferTo(bOut) по достижению в InputStream отметки в 4000256 байт. Однако если залезть внутрь объекта Cipher и обнулять значение this.i файл в конечном итоге полностью правильно дешифруется в выходном стриме. Сколько бы я не пытался у меня не получается собрать такой же объект Cipher как у библиотечного варианта.
Также утилита File-Pro прекрасно справляется с дешифрацией, поэтому ключ\сертификат точно верны. Проблема лежит именно в реализации библиотеки.
Также удалось выяснить, что проблема именно в этом алгоритме шифрования, например, для 1.2.643.2.2.21 все прекрасно работает.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Затрудняюсь подсказать по проблеме. Лучше обратиться к разработчику - ru.signalcom. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close