在C#中使用BouncyCastle实现PGP文件加密的示例

9

我正在尝试使用我的私钥(以ASCII格式)和任何其他公钥(也以ASCII格式)加密文件。 BouncyCastle库似乎是正确的选择,但我找不到C#文档。 请问有人可以提供一个示例帮助我吗?谢谢。


也许我没有正确理解PGP,当你加密一个文件时,你只使用第三方的公钥吗?在这个过程中没有使用你的私钥的任何部分,对吗?如果是这样,我需要修改我的问题为“示例:如何使用第三方公钥进行加密并使用私钥进行签名”。 - Daniel Brink
任何非对称加密都是这样的 - 你使用公钥进行加密和签名验证,而私钥用于签名和解密。 - Eugene Mayevski 'Callback
1个回答

18

这是来自BouncyCastle示例的一些代码。你应该获取源代码并查看单元测试,它们包含了一些示例。我发现Java资源也很有用。该示例可以在源代码中的crypto\test\src\openpgp\examples\PbeFileProcessor.cs下找到。

private static void EncryptFile(
        Stream  outputStream,
        string  fileName,
        char[]  passPhrase,
        bool    armor,
        bool    withIntegrityCheck)
    {
        if (armor)
        {
            outputStream = new ArmoredOutputStream(outputStream);
        }

        MemoryStream bOut = new MemoryStream();

        PgpCompressedDataGenerator comData = new PgpCompressedDataGenerator(
            CompressionAlgorithmTag.Zip);

        PgpUtilities.WriteFileToLiteralData(
            comData.Open(bOut),
            PgpLiteralData.Binary,
            new FileInfo(fileName));

        comData.Close();

        byte[] bytes = bOut.ToArray();

        PgpEncryptedDataGenerator cPk = new PgpEncryptedDataGenerator(
            SymmetricKeyAlgorithmTag.Cast5, withIntegrityCheck, new SecureRandom());

        cPk.AddMethod(passPhrase);

        Stream cOut = cPk.Open(outputStream, bytes.Length);

        cOut.Write(bytes, 0, bytes.Length);

        cOut.Close();

        if (armor)
        {
            outputStream.Close();
        }
    }

1
++ 谢谢。我一直在寻找这些示例的位置。 - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接