Шифрование с открытым ключом с использованием Bouncy Castle, откуда мне знать алгоритм SymmetricKeyAlgorithmC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Шифрование с открытым ключом с использованием Bouncy Castle, откуда мне знать алгоритм SymmetricKeyAlgorithm

Сообщение Anonymous »

У меня есть общедоступный ключ PGP для шифрования файла, и когда я использую такой инструмент, как Kelopatra, я могу зашифровать файл, а другая сторона может успешно расшифровать его.
Но что значения, которые мне нужно настроить при выполнении этого из кода C# с использованием Bouncy Castle?
Не уверен, что значение для SymmetricKeyAlgorithmTag или CompressionAlgorithmTag.
Или укажите его другой способ, как мне определить по ключу PGP, какие значения мне следует использовать?
Я попробовал SymmetricKeyAlgorithmTag.Des, и его невозможно расшифровать с помощью закрытого ключа.
public static class Pgp
{
public static void EncryptFile(
string sourceFile,
string destinationFile,
string encKeyFileName)
{
var pkr = LoadPublicKey(encKeyFileName);
var key = GetFirstPublicEncryptionKeyFromRing(pkr);
EncryptFile(sourceFile, destinationFile, key);
}

private static void EncryptFile(string sourceFile, string destinationFile, PgpPublicKey encKey)
{
using var compressionStream = new MemoryStream();
var compressedDataGenerator = new PgpCompressedDataGenerator(**CompressionAlgorithmTag.Uncompressed**);
PgpUtilities.WriteFileToLiteralData(compressedDataGenerator.Open(compressionStream),
PgpLiteralData.Binary, new FileInfo(sourceFile));

var dataGenerator = new PgpEncryptedDataGenerator(**SymmetricKeyAlgorithmTag.Des**, true, new SecureRandom());
dataGenerator.AddMethod(encKey);

var bytes = compressionStream.ToArray();
using Stream outputFileStream = File.Create(destinationFile);
using var dataGeneratorStream = dataGenerator.Open(outputFileStream, bytes.Length);
dataGeneratorStream.Write(bytes, 0, bytes.Length);
}

private static PgpPublicKey GetFirstPublicEncryptionKeyFromRing(PgpPublicKeyRing keyRing)
{
foreach (var publicKey in keyRing.GetPublicKeys())
if (publicKey.IsEncryptionKey)
return publicKey;

throw new ArgumentException("Can't find encryption key in key ring.");
}

private static PgpPublicKeyRing LoadPublicKey(string filePath)
{
using Stream fileStream = File.OpenRead(filePath);
var pubArmoredStream = new ArmoredInputStream(fileStream);
var pgpObjectFactory = new PgpObjectFactory(pubArmoredStream);
object nextPgpObject = pgpObjectFactory.NextPgpObject();
return nextPgpObject as PgpPublicKeyRing;
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... keyalgorit
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»