среда, 26 декабря 2007 г.

OpenPGP для C# .Net (1). Просмотр хранилища ключей

Данная заметка первая из планируемого цикла по использованию криптографических стандартов openPGP на платформе .Net. Предполагается, что вы знаете, что это такое и обладаете базовыми знаниями криптографии (получить эти знания на русском можно на страницах http://www.pgpru.com/).



Первым делом скачайте последнюю версию bccrypto-net, которую предлагает проект «The Legion of the Bouncy Castle» (большое им спасибо).


Для первого примера напишем консольное приложение, которое выводит id всех секретных ключей из хранилища.


Для начала это хранилище нужно создать. Для создания и хранения ключей PGP на ос Windows есть удобная программа с графическим интерфейсом – winPT. Каждый раз, после добавления нового ключа, программа предлагает сохранить копию хранилища ключей в удобном для вас месте (по умолчанию для хранилища секретных ключей предлагается название secring_bak.gpg). Именно с этой копией мы будем работать.


Не забудьте добавить к проекту консольного приложения BouncyCastle.Crypto.dll.



using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

using Org.BouncyCastle.Bcpg.OpenPgp;


namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(
                "**Прочитаем файл с секретными ключами**\n");

            // путь до хранилища секретных ключей
            string path = @"secring_bak2.gpg";

            // прочитаем хранилище ключей
            Stream BundleStream = File.OpenRead(path);
            BundleStream =
                PgpUtilities.GetDecoderStream(BundleStream);

            PgpSecretKeyRingBundle pgpSec =
                new PgpSecretKeyRingBundle(BundleStream);

            // переберем все связки секретных ключей,
            // каждая связка содержит секретный и публичный ключи
            foreach (PgpSecretKeyRing kRing in pgpSec.GetKeyRings())
            {
                // для каждого секретного ключа
                // покажем его уникальный идентификатор
                foreach (PgpSecretKey k in kRing.GetSecretKeys())
                {
                    Console.WriteLine(k.KeyId);
                }
            }

            BundleStream.Close();
            Console.ReadLine();
        }
    }
}Syhi-подсветка кода


Стоит отметить, что наше приложение выводит id ключей в десятеричной системе исчисления, а та же winPT в шестнадцатеричной. Вы можете проверить корректность вывода, скажем при помощи стандартного калькулятора windows – переведите число в нужную систему исчисления.


Комментариев нет: