我能够生成公钥/私钥对,并在它们之间加密/解密。现在,我需要将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
类的一个实例。
这个来自的文件基本上是乱码,它是公钥的字节表示。我需要你通常在人们之间复制和粘贴的字符串版本。
我怎么能在这里做到这一点?
谢谢!
答案 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());
//...
}
}
}