Добрый день!
Требуется помощь в реализации следующего тех.задания.
Описание Тех. задания.
1) Имеется форма ASP.NET (C#)
2) на форме имеется 2 скрытых поля: hid_data и hid_sign
3) также имеется кнопка but_sign
4) в момент загрузки страницы в поле hid_data попадает содержимое каких-то файлов в виде строки base64.
содержимое файлов разделяется точкой с запятой ';'
this.hid_data.value = "";
foreach (File f in files)
{
byte[] f_data = f.ReadAllBytes();
this.hid_data.value += Convert.ToBase64String(f_data) + ";";
}
5) при нажатии кнопки but_sign каждый из указанных файлов подписывается,
а содержимое подписей (опять же в виде base64) попадает в поле hid_sign
содержимое подписей разделено точкой с запятой ';'
содержимое подписей идет в том же порядке, что и порядок файлов
На стороне клиента используется Крипто-Про (для формирования подписи)
Необходимо на JavaScript (на стороне клиента) реализовать функцию SignMass(data, is_dettached)
которая возвращает подписи переданных файлов (см. пп. 1-4).
При этом is_dettached отвечает за то, будет ли подпись присоедененной или отсоединенной
(если is_dettached == true, то подпись отсоединенная).
Подписи переданных файлов должны быть записаны в формате п.5, т.е.:
* подпись каждого файла в виде строки base64 (чтобы можно было конвертнуть в byte[] и записать на диск)
* все подписи разделены точкой с запятой
Приблизительная схема работы:
function SignMass(data, is_dettached)
{
var user_certificate = ...; //здесь работа CAPICOM
var arr = data.toString().split(';');
var res = [];
for (var i = 0; i < arr.length; i++)
{
res[i] = SingDocument(user_certificate, arr[i], is_dettached);
}
}
где функция SignDocument(user_certificate, data, is_dettached)
- создает подпись к конкретному файлу, выбраным пользовательским сертификатом
function SignDocument(user_certificate, data, is_dettached)
{
var signer = ...; //здесь работает CAPICOM
signer.Certificate = user_certificate;
var signed_data = ...; //здесь работа CAPICOM
signed_data.Content = SignBase64Decode(data); //функция, которая декодирует строку base64 в набор байт
var result = signed_data.Sign(signer);
return result;
}
ЖЕЛАТЕЛЬНО:
чтобы скрипт работал в различных браузерах
За всю работу 2000р
если выполнен пункт "желательно" +1000р
Контактный e-mail:
freelance_eds@mail.ru