22.06.2007 10:34:56Capicom + Delphi + подпись и проверка = проблемы Ответов: 1
Чавдар
Здравствуйте.
После долгого поиска в гугле, решил спроситья здесь, т.к. вроде здесь есть люди использующие(или когда-то использовали) связку Capicom+Delphi.

У меня есть программа подписывающая при помощи эл. подписей и проверяющая соотв.
Программа работает, но есть беда - все хорошо если размер подписываемого файла является кратным 2.
Если размер - нечетное число - файл уже не тот, тк последний байт файла "исчезает". Причем сама прога говорит что все ок, проблемму обнаружили использовав openssl и программу на java+cryptoapi
Поиск в Гугле выявил причину этого ефекта:
http://www.codeproject.com/dotnet/CapicomUTF8.asp - оказывается capicom_tlb который генерится при помощи tlibimp использует widestring для передачи параметров к
Signeddata.Content .Sign .Verify и задав содержание с нечетным количеством байтов, последний удаляется.
В ссылку выше, человек дал рещшение проблемы для C#, но моя попытка применить такое-же решение для Делфи 6 не привели к успеху - наверно у меня не хватает мастерства, да и последние годы Делфи не использовал ( .

Еще нашел что вроде какой-то человек просто заменил все widestring на string в функциях TSignedData но потом не написал работает ли...


Вопрос: Может ли кто-нибудь подкинуть подсказку или пофиксеный capicom_tlb.pas ?

Спасибо
 
Ответы:
22.06.2007 15:07:14Чавдар
чтож, проблемму решил
оказалось в Дельфи вовсе не надо делать что-то с тлб - просто надо сделать

SignedData.Content := Caputil.ByteArrayToBinaryString ( String2byteArray ( sAnsiString) )
где String2byteArray - переводит стринг в байт массив

Всего хорошего :)