Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline SeaguLL1084  
#1 Оставлено : 28 апреля 2024 г. 11:07:38(UTC)
SeaguLL1084

Статус: Новичок

Группы: Участники
Зарегистрирован: 22.04.2024(UTC)
Сообщений: 1

Добрый день, подскажите пожалуйста причину ошибки Error encountered while BER decoding?

Так выглядит создание контейнера:

private byte[] createSignatureContainer(byte[] bytes, SignerInfoDto signerInfo) {

try (ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
ByteArrayOutputStream baos = new ByteArrayOutputStream()) {

PdfReader infoReader = new PdfReader(inputStream);

PdfDocument document = new PdfDocument(infoReader);
int totalPages = document.getNumberOfPages();
document.close();
infoReader.close();

inputStream.reset();

PdfReader signerReader = new PdfReader(inputStream);
PdfWriter writer = new PdfWriter(baos);

PdfSigner signer = new PdfSigner(signerReader, writer, new StampingProperties());

PdfSignatureAppearance appearance = signer.getSignatureAppearance();

PdfFont f1 = PdfFontFactory.createFont(fontPath, "Cp1251");

appearance.setPageRect(new Rectangle(36, 100, 170, 120)).setLayer2Font(f1).setPageNumber(totalPages);

String description = "Некоторое описание";

appearance.setLayer2Text(description);
signer.setFieldName("sign-container");

PdfDictionary dictionary = new PdfDictionary();
dictionary.put(PdfName.Filter, PdfName.Adobe_PPKLite);
dictionary.put(PdfName.SubFilter, PdfName.Adbe_pkcs7_detached);
ExternalBlankSignatureContainer signatureContainer = new ExternalBlankSignatureContainer(dictionary);
signer.signExternalContainer(signatureContainer, 16384);

return baos.toByteArray();

} catch (Exception e) {
logger.error("Ошибка при создании контейнера для подписи в PDF-протоколе");
throw new PdfSigningException("Ошибка при создании контейнера для подписи в PDF-протоколе");
}
}


Метод, вызывающий signDeferred:

public void insertSignature(String signingFileUri, MultipartFile signatureFile) {
try {
multipartFileValidator.validate(signatureFile, null);

if (!fileStorageCore.fileExists(signingFileUri)) {
throw new ResourceNotFoundException("Подписываемый файл не найден");
}

byte[] signatureBytes;
String base64Content = encodeToBase64(signatureFile.getInputStream());
signatureBytes = Base64.getDecoder().decode(base64Content);
IExternalSignatureContainer external = new MyExternalSignatureContainer(signatureBytes);
File file = new File(signingFileUri);
try (
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
FileOutputStream outputStream = new FileOutputStream(file.getName());
InputStream is = fileStorage.readFile(signingFileUri);
PdfReader reader = new PdfReader(is);
PdfWriter writer = new PdfWriter(outputStream);
PdfDocument document = new PdfDocument(reader, writer, new StampingProperties());) {
SignatureUtil signatureUtil = new SignatureUtil(document);
PdfSignature signature = signatureUtil.getSignature("sign-container");

PdfSigner.signDeferred(document, "sign-container", outputStream, external);

is.close();
byteArrayOutputStream.writeTo(outputStream);
} catch (Exception e) {
logger.error("Ошибка при вставке ЭЦП: {}", e.getMessage(), e);
return;
}
} catch (Exception e) {
logger.error(e);
}
}



Таким образом выглядит мой простенький класс контейнера:

class MyExternalSignatureContainer implements IExternalSignatureContainer {

private byte[] signature;

public MyExternalSignatureContainer(byte[] signature) {
this.signature = signature;
}

public void modifySigningDictionary(PdfDictionary signDic) {
}

@Override
public byte[] sign(InputStream arg0) throws GeneralSecurityException {
return signature;
}
}
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.