Как подписать xml файл средствами php

dobermann_arb

Новичок
Как подписать xml файл средствами php

Пользователь заполняет форму, после чего формируется xml файл который необходимо подписать ЭЦП.Как подписать xml файл средствами php?
 

mity

Новичок
Ну всё зависит от того какой именно ЭЦП вы хотите его подписать.
Нужно ли это сделать формально или для каких либо денежных/банковских отношений?
Как мне видится нужно формировать временный файл, и подписывать его через запуск внешней сертифицированной программы, вызываемой через exec.
 

dobermann_arb

Новичок
ЭЦП пользователя. Я так понимаю для формального подписания необходимо вставить хеш в раздел <Signature> файла xml?
 

mity

Новичок
Хеш может вставляться только для контроля целостности.
 

dimagolov

Новичок
ЭЦП пользователя.
в такой постановке никак. потому что для того, чтобы подписать документ, требуется закрытый ключ, а он в идеале не должен покидать носитель, скажем смарт-карту. то есть ЭЦП пользователя может поставить только пользователь и отправить вместе с подписываемым документом.
 

eltoko

Новичок
тоже столкнулся с данной задачей..

dimagolov
а если ЭЦП пользователя держать на сервере? :)
опустим "это не есть хорошо"...

файл должен(!) подписываться ЭЦП одного пользователя, а создают файлы несколько пользователей... как быть в такой ситуации?
 

dobermann_arb

Новичок
eltoko
А как происходит сам процесс подписывания? Можно поподробнее
 

eltoko

Новичок
dobermann_arb
я не знаю )) в поиске решения..

-~{}~ 07.06.10 17:43:

dobermann_arb
чета вроде нашлось...
см 8ой пост: http://forum.ubuntu.ru/index.php?topic=78433.0
 

partizan

Новичок
Подписывать можно у клиента в браузере. Вот пример для IE:
http://cesaris.itsway.kiev.ua/Samples/Sign.aspx (сертификат юзера с закрытым ключом установлен в браузере)
 

fixxxer

К.О.
Партнер клуба
а не в ие слабо? )

мс криптоапи это то понятно.
 

eltoko

Новичок
partizan
ссылка просто ужасна.. зашел хромом :)


dobermann_arb
вот ещё нашлось:
http://www.hostforum.ru/archive/index.php/t-8272.html

-~{}~ 08.06.10 14:27:

а вот ещё нашел :)
Пример скрипта для проверки ЭЦП на PHP:

PHP:
<?
//Секретный ключ в нашей системе
$S_KEYS = '12345';

$ss='';
//Перебор всех полей полученных при передачи мотодом "POST"
foreach ($_POST as $k => $v)
{
$array[$k]=$v;
$ss = "$ss>>$k=$v\n";
}
//Функция для кодирования данных($data) ключем($key) методом hmac 
function hmac($key, $data)
{
   $b = 64; // byte length for md5
   if (strlen($key) > $b) {
       $key = pack("H*",md5($key));
   }
   $key  = str_pad($key, $b, chr(0x00));
   $ipad = str_pad('', $b, chr(0x36));
   $opad = str_pad('', $b, chr(0x5c));
   $k_ipad = $key ^ $ipad ;
   $k_opad = $key ^ $opad;

   //Возвращает результат - кодированное слово 
   return md5($k_opad  . pack("H*",md5($k_ipad . $data)));
}
//Список фиксированных полей отправленных системой
//Остальные параметры - это поля поставщика услуг
$s1 = $array['date'];
$s2 = $array['id_pay'];
$s3 = $array['trans_pay'];
$s4 = $array['trans_corr'];
$s5 = $array['keyt'];
$s6 = $array['summ'];
$s7 = $array['curr'];
$s8 = $array['commiss'];
$s9 = $array['itogo'];

//Кодируемая строка (состоит из порядка данных фиксированных полей системы)
$strings = "$s1$s2$s3$s4$s5$s6$s7$s8$s9";

//Результат кодирования
$sign = hmac($S_KEYS, $strings);

$ss = "\n$ss=STRING-$strings\n\n";
$ss = "\n$ss=SIGN-$sign\n\n";

//Запись результатов обработки в файл 'file.txt'
$file=fopen('file.txt',"w+");
$text= "$ss";
fwrite($file,$text);
fclose($file);
?>
-~{}~ 19.07.10 15:34:

у мну результат получился с помощью vbscript :) подписание файла происходит на стороне клиента то бишь.
короче говоря, ищите CAPICOM или что-нить наподобие.
 
Сверху