У меня есть общедоступный ключ 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#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Сканирование Prisma openjdk17, проблема CVE-2022-45146 Bouncy Castle 1.0.2.3 1.0.2.4
Anonymous » » в форуме JAVA - 0 Ответы
- 45 Просмотры
-
Последнее сообщение Anonymous
-