У меня есть общедоступный ключ 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
Шифрование с открытым ключом с использованием Bouncy Castle, откуда мне знать алгоритм SymmetricKeyAlgorithm ⇐ C#
Место общения программистов C#
1731080079
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;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79170659/public-key-encryption-using-bouncy-castle-how-do-i-know-the-symmetrickeyalgorit[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия