1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Проблема С Проверкой Подписи Через Capicom

Тема в разделе "Delphi - программирование", создана пользователем Allegro, 5 сен 2014.

  1. Allegro

    Allegro Member

    Репутация:
    0
    Регистрация:
    29 авг 2007
    Сообщения:
    17
    Симпатии:
    1
    День добрый! У меня есть программа написанная на delphi 7, в ней производится подписание документов с помощью capicom. контент формируется следующим образом: SignedData.Content:=QryWhere.FieldByName('img2txt').AsVariant + DateToStr(sigDate);
    после чего без проблем заверяется ЭЦП. и есть другая программа написанная на Embarcadero RAD Studio XE2 в которой производится проверка подписи следующим образом:
    SignedData.Content:= VarToStr(ADOQ1.FieldByName('img2txt').AsVariant)+VarToStr(ADOQ1.FieldByName('DataSigA').AsString);
    SignedData.Verify(Sig, true, 0);

    при выполнении проверки вылетает неправильное значение Хеша.
    Помогите пожалуйста реализовать грамотно проверку подписи, что бы не вылетало ошибок
     
  2. sinkopa

    sinkopa Well-Known Member

    Репутация:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Я не экстрасенс и кто такой у Вас SignedData.Content могу только догадываться... но подозреваю лажа вот тут
    Код:
     + VarToStr(ADOQ1.FieldByName('DataSigA').AsString);
    Либо поле берите как тип variant: VarToStr(ADOQ1.FieldByName('DataSigA').AsVariant)
    Либо функцию VarToStr использовать не нужно.
    Код:
    SignedData.Content:= VarToStr(ADOQ1.FieldByName('img2txt').AsVariant)+ADOQ1.FieldByName('DataSigA').AsString;
    Правда если у компилятора включена оптимизация, такое Ваше "нахальство" он может и подправить тихонько.
    Ну тогда подозреваю что дело в строковом типе.
    В Delphi 7 тип string это AnsiString (однобайтные символы) а в XE2 string это WideString (два байта на один символ).
    Т.е. при одинаковом строковом содержании (например строка "Привет ХиТРый;)") длина в байтах у нее будет разная (для XE2 в два раза длиннее чем в Delphi 7).
    Соответственно функция считающая Хеш даст разные результаты.
     
Загрузка...
Похожие Темы - Проблема Проверкой Подписи
  1. Apton
    Ответов:
    0
    Просмотров:
    37
  2. Anonimyc
    Ответов:
    0
    Просмотров:
    25
  3. VikTor1990
    Ответов:
    3
    Просмотров:
    79
  4. erlan1749
    Ответов:
    0
    Просмотров:
    36
  5. ivannnn
    Ответов:
    0
    Просмотров:
    56

Поделиться этой страницей