C# 如何在C中使用Bouncy Castle对公共PGP密钥进行签名#
我想在我的应用程序中创建信任网支持,允许我的用户使用他们的私钥,签署其他用户的公钥-使用C#和Bouncy Castle 我已经解决了大部分问题,比如创建PGP密钥,使用HTTP REST将它们提交到密钥服务器,加密MIME消息并对它们进行加密签名(使用MimeKit)——但剩下的一个障碍是找出一些可以使用我的私钥的代码,为另一个人的公钥签名,使用弹跳城堡 由于不列颠哥伦比亚省的文件编制非常糟糕,要弄清这些部分,以前已经证明几乎是不可能的 作为记录,我使用GnuPG作为密钥存储 如果有人想看看我的代码到目前为止我做了什么,请随时检查C# 如何在C中使用Bouncy Castle对公共PGP密钥进行签名#,c#,bouncycastle,pgp,C#,Bouncycastle,Pgp,我想在我的应用程序中创建信任网支持,允许我的用户使用他们的私钥,签署其他用户的公钥-使用C#和Bouncy Castle 我已经解决了大部分问题,比如创建PGP密钥,使用HTTP REST将它们提交到密钥服务器,加密MIME消息并对它们进行加密签名(使用MimeKit)——但剩下的一个障碍是找出一些可以使用我的私钥的代码,为另一个人的公钥签名,使用弹跳城堡 由于不列颠哥伦比亚省的文件编制非常糟糕,要弄清这些部分,以前已经证明几乎是不可能的 作为记录,我使用GnuPG作为密钥存储 如果有人想看看我
我可能不应该在这里问这个问题,但我也希望有一些BC大师能对我目前的代码有一个大致的了解,并检查我是否对我迄今为止所做的事情做出了愚弄…经过大量的尝试和错误后找到了答案,这就是
private static byte[] SignPublicKey(
PgpSecretKey secretKey,
string password,
PgpPublicKey keyToBeSigned,
bool isCertain)
{
// Extracting private key, and getting ready to create a signature.
PgpPrivateKey pgpPrivKey = secretKey.ExtractPrivateKey (password.ToCharArray());
PgpSignatureGenerator sGen = new PgpSignatureGenerator (secretKey.PublicKey.Algorithm, HashAlgorithmTag.Sha1);
sGen.InitSign (isCertain ? PgpSignature.PositiveCertification : PgpSignature.CasualCertification, pgpPrivKey);
// Creating a stream to wrap the results of operation.
Stream os = new MemoryStream();
BcpgOutputStream bOut = new BcpgOutputStream (os);
sGen.GenerateOnePassVersion (false).Encode (bOut);
// Creating a generator.
PgpSignatureSubpacketGenerator spGen = new PgpSignatureSubpacketGenerator();
PgpSignatureSubpacketVector packetVector = spGen.Generate();
sGen.SetHashedSubpackets (packetVector);
bOut.Flush();
// Returning the signed public key.
return PgpPublicKey.AddCertification (keyToBeSigned, sGen.Generate()).GetEncoded();
}
如果这是您问题的解决方案,您可能希望将其标记为已接受的答案。它可以帮助人们在未来,他们鼓励它在这里。