Это старая редакция страницы Черновики / Статьи / Open P G Pдля C за 23/01/2008 13:33.
OpenPGP для C# .Net
Просмотр хранилища ключей
Данная заметка первая из планируемого цикла по использованию криптографических стандартов openPGP на платформе .Net. Предполагается, что вы знаете, что это такое и обладаете базовыми знаниями по криптографии.
Первым делом скачайте последнюю версию bccrypto-net, которую предлагает проект «The Legion of the Bouncy Castle» (большое им спасибо).
Для первого примера напишем консольное приложение, которое выводит id всех секретных ключей из хранилища.
Для начала это хранилище нужно создать. Для создания и хранения ключей PGP на ос Windows есть удобная программа с графическим интерфейсом – winPT. Каждый раз после добавления нового ключа программа предлагает сохранить копию хранилища ключей в удобном для вас месте (по умолчанию для хранилища секретных ключей предлагается название secring_bak.gpg). Именно с этой копией мы будем работать.
Не забудьте добавить к проекту консольного приложения BouncyCastle.Crypto.dll.
Стоит отметить, что наше приложение выводит id ключей в десятеричной системе исчисления, а та же winPT в шестнадцатеричном. Вы можете проверить корректность вывода, скажем при помощи стандартного калькулятора windows – переведите число в нужную систему счисления.
Удаление (добавление) ключа из хранилища
Вы уже знаете, как можно узнать какие ключи находятся в хранилище из заметки «Просмотр хранилища ключей»
Теперь рассмотрим, как можно удалить и добавить связку ключей в хранилище.
На деле, удаление и добавление связки ключей, очень похожие операции. Поэтому для краткости и упрощения кода будем удалять связку — для добавления нам бы потребовалось в начале создать ключи.
И так, первым делом прочитаем хранилище ключей. Эта операция вам уже знакома.
Теперь получим связку, которую хотим удалить, для этого нужно знать уникальный идентификатор. Обычно он представляется в шестнадцатеричном формате, но здесь он должен быть в десятеричном.
Вот и все, осталось только сохранить изменения. Для этого надо лишь передать методу Encode() объекта хранилища ключей поток и он запишет в него нужную информацию.
Соберем все вместе.
Подписание строки (ЭЦП)
В данной заметке мы выдадим ЭЦП для произвольной строки. Результатом работы нашей программы будет файл, содержащий подпись в формате openPGP, оформленный по всем стандартам.
Как и в первой статье цикла («Просмотр хранилища ключей») будем использовать библиотеку от «The Legion of the Bouncy Castle».
Вы уже знаете как обращаться с хранилищем секретных ключей:
Теперь нужно найти ключ, на котором мы будем подписывать. Напомню, что PGP-ключ состоит из 2-х половинок: секретного и открытого ключей.
Для того чтобы использовать секретную половинку нужно указать пароль доступа. Приведенный ниже код выполняет поиск PGP-ключа и указывает пароль для секретной половинки.
Далее следует создать объект генератора подписи, предварительно выбрав алгоритм хеширования:
На этом подготовительные операции заканчиваются. Определим строку, которую хотим подписать, а также файл для хранения подписи в нужном формате. Корректность подписи из такого файла можно проверить стандартными средствами, например для windows можно использовать winPT.
Собирем весь код вместе:
В итоге у нас получился файл следующего вида: