C# 使用Bouncy Castle PGP将公钥字节另存为字符串

C# 使用Bouncy Castle PGP将公钥字节另存为字符串,c#,bouncycastle,C#,Bouncycastle,我能够生成公钥/私钥对,并在它们之间进行加密/解密。现在,我需要向其他人发送一个PGP公钥的严格版本,但我正在努力解决如何最好地做到这一点 要获取公钥,我使用: inputStream = PgpUtilities.GetDecoderStream(inputStream); PgpPublicKeyRingBundle pgpPub = new PgpPublicKeyRingBundle(inputStream); foreach (PgpPublicKey

我能够生成公钥/私钥对,并在它们之间进行加密/解密。现在,我需要向其他人发送一个PGP公钥的严格版本,但我正在努力解决如何最好地做到这一点

要获取公钥,我使用:

inputStream = PgpUtilities.GetDecoderStream(inputStream);
        PgpPublicKeyRingBundle pgpPub = new PgpPublicKeyRingBundle(inputStream);

        foreach (PgpPublicKeyRing kRing in pgpPub.GetKeyRings())
        {

            foreach (PgpPublicKey k in kRing.GetPublicKeys())
            {

                if (k.IsEncryptionKey)
                {

                    return k;

                }


            }


        }
我可以访问
k
,这是
PgpPublicKey
类的一个实例

从中提取的文件基本上是jibberish,它是公钥的字节表示。我需要的字符串版本,你通常会复制和粘贴之间的人

我在这里怎么做


谢谢

要使用Base64对文本表示中的键进行编码,只需在调用
PgpPublicKey.encode
之前将输出流包装在
ArmoreOutputStream
中即可

您的示例扩展为将密钥获取为Base64编码字符串:

foreach (PgpPublicKeyRing kRing in pgpPub.GetKeyRings())
{
    foreach (PgpPublicKey k in kRing.GetPublicKeys())
    {
        if (k.IsEncryptionKey)
        {
            MemoryStream memStream = new MemoryStream();
            ArmoredOutputStream armoredStream = new ArmoredOutputStream(memStream);
            k.Encode(armoredStream);
            armoredStream.Close();

            string keyString = Encoding.ASCII.GetString(memStream.ToArray());
            //...
        }
    }
}