Вы уже знаете, как можно узнать какие ключи находятся в хранилище из заметки «Просмотр хранилища ключей»
Теперь рассмотрим, как можно удалить и добавить связку ключей в хранилище.
На деле, удаление и добавление связки ключей, очень похожие операции. Поэтому для краткости и упрощения кода будем удалять связку -- для добавления нам бы потребовалось в начале создать ключи.
И так, первым делом прочитаем хранилище ключей. Эта операция вам уже знакома по первым двум статьям цикла.
// путь до хранилища секретных ключей;
string path = @"secring_bak3.gpg";
// прочитаем хранилище ключей
Stream BundleStream = File.OpenRead(path);
BundleStream =
PgpUtilities.GetDecoderStream(BundleStream);
PgpSecretKeyRingBundle pgpSec =
new PgpSecretKeyRingBundle(BundleStream);
BundleStream.Close()Syhi-подсветка кода
Теперь получим связку, которую хотим удалить, для этого нужно знать уникальный идентификатор. Обычно он представляется в шестнадцатеричном формате, но здесь он должен быть в десятеричном.
// получим связку ключей по уникальному ID
long keyId = -7764185142489588446;
PgpSecretKeyRing pgpKeyRing =
pgpSec.GetSecretKeyRing(keyId);
Непосредственно удаление:
pgpSec = PgpSecretKeyRingBundle.RemoveSecretKeyRing(
pgpSec, pgpKeyRing);
/*
вот как выглядит добавление ключа
PgpSecretKeyRingBundle.AddSecretKeyRing(pgpSec, pgpKeyRing);
*/Syhi-подсветка кода
Вот и все, осталось только сохранить изменения. Для этого надо лишь передать методу Encode() объекта хранилища ключей поток и он запишет в него нужную информацию.
// Запишем хранилище ключей
Stream NewBundleStream = File.OpenWrite(@"new_secring_bak.gpg");
pgpSec.Encode(NewBundleStream);
NewBundleStream.Close();Syhi-подсветка кода
Соберем все вместе.
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Org.BouncyCastle.Bcpg;
using Org.BouncyCastle.Bcpg.OpenPgp;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("**Удаление связки ключей**\n");
// путь до хранилища секретных ключей
string path = @"secring_bak3.gpg";
// прочитаем хранилище ключей
Stream BundleStream = File.OpenRead(path);
BundleStream =
PgpUtilities.GetDecoderStream(BundleStream);
PgpSecretKeyRingBundle pgpSec =
new PgpSecretKeyRingBundle(BundleStream);
BundleStream.Close();
// получим связку ключей по уникальному ID
long keyId = -7764185142489588446;
PgpSecretKeyRing pgpKeyRing =
pgpSec.GetSecretKeyRing(keyId);
// удалим связку
pgpSec =
PgpSecretKeyRingBundle.RemoveSecretKeyRing
(pgpSec, pgpKeyRing);
// Запишем хранилище ключей
Stream NewBundleStream =
File.OpenWrite(@"new_secring_bak.gpg");
pgpSec.Encode(NewBundleStream);
NewBundleStream.Close();
Console.ReadLine();
}}}Syhi-подсветка кода
Комментариев нет:
Отправить комментарий