使用Bouncy Castle PGP将公钥字节保存为字符串

时间:2013-12-05 20:18:12

标签: c# bouncycastle

我能够生成公钥/私钥对,并在它们之间加密/解密。现在,我需要将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类的一个实例。

这个来自的文件基本上是乱码,它是公钥的字节表示。我需要你通常在人们之间复制和粘贴的字符串版本。

我怎么能在这里做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:1)

要使用Base64对文本表示中的密钥进行编码,只需将输出流包装在ArmoredOutputStream中,然后再调用PgpPublicKey.Encode

您的示例已扩展为将密钥作为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());
            //...
        }
    }
}