Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с libipriv.dll, Библиотека для работы с ЭЦП 
V
    Опции темы
Alex_bochkov
Дата 30.10.2006, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 1.9.2006

Репутация: нет
Всего: нет



Система приема платежей "Киберплат" использует для обмена информацией с точками приема платежей ЭЦП (открытый и закрытый ключ).
Я, мягко говоря, не очень силен в Делфи, но потребовалось срочно организовать шифрованный обмен данными используя именно этот способ.
Может кто-нибудь поможет разобраться в том, как работать с этой библиотекой. Во вложении к сообщению находятся тестовые ключи, сама библиотека и *.pas файл для использования библиотеки вместе с Делфи.
Основная проблема - подпись сообщения (при выполнении данного метода появляется ошибка... там что-то с памятью)
Код

Crypt_Initialize;
Crypt_OpenPublicKeyFromFile(0,'D:\Base\keys\pubkeys.key',90111,KeyOpen,nil);
Crypt_OpenSecretKeyFromFile(0,'D:\Base\keys\secret.key','000000000',keyClose);
Crypt_Sign(???,???,???,???,KeyClose);   (После ответа программиста Киберплата я просто не знаю что туда ставить...)
Crypt_Done;

Как я понимаю, этот код выполняет следующее:
  • Подключение dll
  • Загрузка открытого ключа
  • Загрузка секретного ключа
  • Подпись сообщения
  • Выгрузка dll
Первые три пункта выполняются нормально, а на четвертом всегда проблемы...
Приведу ответ программиста из Киберплата по поводу появления ошибки:
Цитата

> Скорее всего ошибки связаны с тем, что в качестве буферов библиотека 
> использует не Паскалевские строки, а Сишные. То есть это массивы 
> символов, оканчивающиеся нулевым байтом. При этом сама библиотека не 
> выделяет память под эти буфера, а ожидает на входе указатель на 
> выделенный основной программой массив. Это касается как ключей, так и 
> сообщений.
>
> Описание переменной для буфера должно быть что-то в виде
> Var buf : Array[1..2048] of Char;
> и в качестве параметра передается ^buf.
>
> Память должны быть заранее выделена.

На дальнейшие вопросы он более не отвечает...
А вопрос собственно в том, как правильно описать все входящие параметры для функций...
 smile 

Присоединённый файл ( Кол-во скачиваний: 34 )
Присоединённый файл  libipriv.rar 60,13 Kb
PM MAIL   Вверх
Matematik
Дата 30.10.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



Цитата(Alex_bochkov @  30.10.2006,  12:36 Найти цитируемый пост)
при выполнении данного метода появляется ошибка... там что-то с памятью

Написать это сообщение лень? Может что-то типа "Access violation at address"
Цитата(Alex_bochkov @  30.10.2006,  12:36 Найти цитируемый пост)
А вопрос собственно в том, как правильно описать все входящие параметры для функций...

Код

// Формирование подписи сообщения.
// src: входной, буфер с телом сообщения
// nsrc: длина сообщения, -1 - считается сама (должен быть нуль-терминатор)
// dst: выходной, буфер для приема тела подписанного сообщения
// ndst: входной, максимальная длина приемного буфера
// key: входной, закрытый ключ
// Возвращает: длина тела сообщения или код ошибки
function Crypt_Sign(const src:PChar;nsrc:integer;dst:Pchar;ndst:integer; key:PIPRIV_KEY):integer;stdcall external 'libipriv.dll';

типа такого
Код

const siz = 1024*4;
var out_buf : Pchar;
     str : String;
begin
  out_buf := StrAlloc(siz); // выделение памяти
  {...} 
  str := 'сообщение!!!';
  Crypt_Sign(PChar(str), Length(str), out_buf, siz, {...});
  // в out_buf подписанное сообщение
  {...}
  StrDispose(out_buf); // освобождение памяти
end

PM MAIL WWW ICQ   Вверх
Alex_bochkov
Дата 30.10.2006, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 1.9.2006

Репутация: нет
Всего: нет



РАБОТАЕТ!!
Просто все что я могу в делфи - это Label1.Caption:=...

Спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0987 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.