Статус: Новичок
Группы: Участники
Зарегистрирован: 21.09.2018(UTC) Сообщений: 4 Сказал «Спасибо»: 1 раз
|
Доброго времени суток. Использую КриптоПро browser plugin для Google Chrome для подписания файлов. Реализовал такой алгоритм:
Кусочек кода, который использует открепленную или прикрепленную подпись. Использует подписание по хэшу. В dataToSign массив Base64 строк, который был получен от кусочков файла по 3 Мб. Crypto.constants.cryptoPro.SIGNATURE_TYPE = 0, что приводит к использованию открепленной подписи. Код:
var signer = yield (cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner"));
yield (signer.propset_Certificate(cert));
yield (signer.propset_Options(Crypto.constants.certificateInclude.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN));
var oHashedData = yield (cadesplugin.CreateObjectAsync("CAdESCOM.HashedData"));
yield (oHashedData.propset_DataEncoding(Crypto.constants.cryptoPro.CADESCOM_BASE64_TO_BINARY));
yield (oHashedData.propset_Algorithm(Crypto.constants.CADESCOM_HASH_ALGORITHM_CP_GOST_3411));
for(var i = 0; i < dataToSign.length; i++){
yield (oHashedData.Hash(dataToSign[i]));
}
var signedData = yield (cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData"));
try {
var type = Crypto.constants.cryptoPro.SIGNATURE_TYPE === 0 ? 'CADESCOM_CADES_BES' : 'CADESCOM_CADES_X_LONG_TYPE_1';
signature = yield (signedData.SignHash(oHashedData, signer, Crypto.constants.cryptoPro[type]));
if (signature) {
var oSignedData = yield(cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData"));
try {
var result = yield (oSignedData.VerifyHash(oHashedData, signature, Crypto.constants.cryptoPro[type]));
} catch (err) {
alert("Failed to verify signature. Error: " + cadesplugin.getLastError(err));
}
onSuccess(signature);
}
}
catch (err) {
throw "Не удалось создать подпись из-за ошибки: " + Crypto.getErrorMessage(err);
}
Небольшие файлы ~ 6Мб подписываются, а подпись проверяется успешно с помощью КриптоАРМ. Для файлов большего размера подписание успешно, а подпись не проходит проверку: Цитата: Общий статус подписи Одна или несколько подписей некорректна или нет доверия Статус проверки математической корректности Одна или несколько подписей некорректна или нет доверия Статус проверки сертификата Сертификат действителен
Но oSignedData.VerifyHash, заканчивает выполнение без exception, что означает правильность подписи. В чем проблема и как добиться успешной проверки подписи для больших файлов?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,691 Сказал «Спасибо»: 500 раз Поблагодарили: 2046 раз в 1586 постах
|
Здравствуйте. С этим примером знакомы? Подпись файла с использованием FileAPI и чтением файла по частямЦитата: В dataToSign массив Base64 строк, который был получен от кусочков файла по 3 Мб.
Код:for(var i = 0; i < dataToSign.length; i++){
yield (oHashedData.Hash(dataToSign[i]));
}
Обратное декодирование из этих кусочков в массиве - дает тот же файл (проверить сторонними средствами, по хешу)? |
|
1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 21.09.2018(UTC) Сообщений: 4 Сказал «Спасибо»: 1 раз
|
Да, проблема была при формировании base64 строк.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close