Статус: Новичок
Группы: Участники
Зарегистрирован: 21.07.2022(UTC) Сообщений: 4 
|
Здравствуйте. У меня задача подписывать PDF файлы через КриптоПро ЭЦП Browser plug-in с отделенной подписью В документации нашел примерВот что у меня получилось по его мотивам. Код:const CADESCOM_CADES_BES = 1;
async function sign(cert, data) {
const signer = await cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
await signer.propset_Certificate(cert);
await signer.propset_CheckCertificate(true);
const signedData = await cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
await signedData.propset_ContentEncoding(CADESCOM_BASE64_TO_BINARY);
const base64Data = btoa(data);
await signedData.propset_Content(base64Data);
let signedMessage = "";
try {
signedMessage = await signedData.SignCades(signer, CADESCOM_CADES_BES, true);
signedMessage = atob(signedMessage);
return signedMessage;
} catch (e) {
e = cadesplugin.getLastError(er);
alert(`Ошибка подписи файла: ${e}`);
}
}
После получения signedMessage сохраняю в файл с расширением *.p7s (насколько я понял там все равно *.sig *.sgn) Посмотрел в блокноте. Вроде похоже на подпись. Пытаюсь проверить файл в cptools.exe. Пишет что "Выбранный файл не является подписью или поврежден"
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,162   Сказал «Спасибо»: 618 раз Поблагодарили: 2389 раз в 1880 постах
|
Здравствуйте.
Прислать файл можете? |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.07.2022(UTC) Сообщений: 4 
|
Здравствуйте. Вот архив с тем что получилось в результате подписания  Sample.001.zip (467kb) загружен 5 раз(а).Вот песочница где пробую создавать отделенную подпись (файл SignTest\sign_detached\sign_detached.html)  SignTest.zip (82kb) загружен 6 раз(а).
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,162   Сказал «Спасибо»: 618 раз Поблагодарили: 2389 раз в 1880 постах
|
Сообщите конфигурацию рабочего места, какая версия csp\плагина, полностью https://www.cryptopro.ru...ge/cades_bes_sample.htmlформируется без ошибок? Цитата:
После получения signedMessage сохраняю в файл с расширением *.p7s (насколько я понял там все равно *.sig *.sgn) Посмотрел в блокноте. Вроде похоже на подпись.
Каким образом? Попробуйте сохранять в base64 и прислать подпись в таком виде на проверку. |
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,162   Сказал «Спасибо»: 618 раз Поблагодарили: 2389 раз в 1880 постах
|
Цитата:signedMessage = atob(signedMessage); Это убрать |
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.07.2022(UTC) Сообщений: 4 
|
 SignTest_working_version.zip (82kb) загружен 15 раз(а).Автор: Андрей *  Цитата:signedMessage = atob(signedMessage); Это убрать Это помогло! Спасибо Кроме того, если получать файл для подписи так как делаю я через FileReader.readAsArrayBuffer, то результат будет ArrayBuffer Его нужно развернуть в строку прежде чем кодировать в BASE64 Код:function arrayBufferToBase64(buffer) {
let binary = '';
let bytes = new Uint8Array(buffer);
let len = bytes.byteLength;
for (let i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return btoa(binary);
}
Рабочий пример с формированием подписи вот тут  SignTest_working_version.zip (82kb) загружен 15 раз(а). если кому-то вдруг потребуется.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,162   Сказал «Спасибо»: 618 раз Поблагодарили: 2389 раз в 1880 постах
|
|
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close