(2013-10-09 12:04:54 отредактировано tim96)

Работа с функций GrdCryptEx.

Добрый день.
Пытаюсь зашифровать текст алгоритмом AES 128 используя функцию GrdCryptEx, так как сказано в документации что нужно использовать ее.  Комплект разработчика 6.2, C#, windows 7. К сожалению не нашел в документации и в примерах которые прилагаются к документации, вариантов использования функции GrdCryptEx. Буду очень благодарен за пару примеров работы с данной функцией. Сейчас использую такой вариант.

RetCode = GrdApi.GrdCryptEx(
                                  GrdHandle,    // Хэндл контейнера Guardant
                                  number, // Номер аппаратного алгоритма
                                  res,                 // Массив с данными
                                  (UInt32)GrdAM.CBC + (UInt32)GrdAM.Encode,   // Методы кодирования
                                  sizeof(Int64),
                                  lnitvector);

При использовании возникает ошибка: GrdCryptEx: One or more function argument are Invalid.
Если же использую GrdCrypt то тоже получается ошибка.

GrdApi.GrdCrypt(
                        GrdHandle,    // Хэндл контейнера Guardant
                        number,                         // Номер аппаратного алгоритма
                        res,                 // Массив с данными
                        (UInt32)GrdAM.CBC + (UInt32)GrdAM.Decode,   // Методы кодирования
                        // sizeof(Int64),
                        lnitvector);

Думал что возможно есть ограничение на использование блочных режимов. Но в документации нашел только "Однонаправленные алгоритмы AES128 можно использовать только в блочных режимах ECB и CBC. Поточные режимы CFB и OFB использовать нельзя".

(2013-10-09 14:32:30 отредактировано Антон Тихиенко)

Re: Работа с функций GrdCryptEx.

Добрый день, tim96.

Приложите, пожалуйста, код, где объявляется и инициализируется некоторым значением, переменная lnitvector, где указан размер массива с преобразуемыми данными (res) и скриншот отчета утилиты диагностики Guardant (Пуск/Панель управления/Драйверы Guardant/Кнопка "Диагностика"/Подробная информация) для используемого ключа.

Также уточните, какой именно тип аппаратного алгоритма AES128 используется (прошит в ключе): для симметричного шифрования, только для кодирования или только для декодирования?

Re: Работа с функций GrdCryptEx.

byte[] res = Encoding.ASCII.GetBytes("12345678901234567890");
Int64 lnitvector = 1234567890123456;
UInt32 number = 05;

Ключ для симметричного шифрования.
Скриншот рамером 176 Kb загрузить не дает, хотя написано что можно загружать до 2000 Kb. Выводится сообщение: undefined (undefined) - Файл превышает допустимый размер и не будет загружен (2000000).

Re: Работа с функций GrdCryptEx.

tim96 пишет:

Скриншот рамером 176 Kb загрузить не дает, хотя написано что можно загружать до 2000 Kb. Выводится сообщение: undefined (undefined) - Файл превышает допустимый размер и не будет загружен (2000000).

Загрузите скриншот на открытый хостинг изображений (например, screenshot.ru и т.п.) и укажите ссылку на него.

Re: Работа с функций GrdCryptEx.

Сделано. Скриншот утилиты диагностики http://screenshot.ru/image/8uC

Re: Работа с функций GrdCryptEx.

tim96 пишет:

byte[] res = Encoding.ASCII.GetBytes("12345678901234567890");
Int64 lnitvector = 1234567890123456;
UInt32 number = 05;

В данном случае в первую очередь следует обратить внимание на то, что при использовании режима шифрования CBC, длинна шифруемого блока данных должна быть кратна минимальной длине блока - для аппаратного алгоритма AES128 это 16 байт. Вектор инициализации так же должен быть 16-байтовый.

Подробное описание всех режимов шифрования и аппаратных алгоритмов есть в "Справочной системе по Guardant API".

Re: Работа с функций GrdCryptEx.

Антон спасибо, уменьшил тестовую строку до 16 символов и ошибка не выводится. Буду внимательней читать документацию.
И еще вопрос про шифрование алгоритмом AES128 блоками CBC.
Скажите пожалуйста код который прошивается в ключ вместе с алгоритмом при шифровании как то еще меняется при шифровании? Просто мне бы хотелось сделать шифрование с помощью ключа а расшифровку сделать без использования ключа программными средствами. Такое возможно? Сейчас при шифровании ключом "1111111111111111", строки "1234567890123456" с вектором инициализации 1234567890123456 ключ выдает мне значение: After encryption base64: D3MngKi/n1hjC1xSP35uTQ==. При этом при тех же данных шифрование без ключа программными алгоритмами дает результат: After encryption base64: EN/BtfZs/WodxG1mkHvusUG5mSOAsDra1823TDt+zgU=.

Re: Работа с функций GrdCryptEx.

Реализация алгоритма симметричного шифрования AES128 в наших ключах действительно может производить обработку (шифрование\дешифрация) данных, до некоторой степени, отлично от иных, софтверных, реализаций данного алгоритма. Это связанно со спецификой его исполнения для наших электронных ключей и рядом дополнительных возможностей (режимов) его работы (например, флаг зависимости вида преобразований от ID электронного ключа). Подробное описание режимов работы наших алгоритмов и остальные опции утилит и ключей содержится с нашей документации. Вся документация находится в одной папке с установленным комплектом разработчика Guardant, директория по умолчанию: "%Program Files%\Guardant\Guardant 5\%Public Code%\Doc" и доступна для скачивания с нашего сайта.

Для решения же описанной Вами задачи надежнее всего будет использовать наши софтверные ключи Guardant SP при дешифрации данных, обработанных аппаратным ключом. Это позволит корректно обрабатывать такие данные без аппаратного ключа, т.к. софтверные ключи точно также используют аппаратный алгоритм AES128.

При первой регистрации на сервере активации Guardant SP, Вам бесплатно будет предоставлено 25 серийных номеров для создания и тестирования полнофункциональных SP-ключей.