我在仅使用公钥创建AsymmetricCipherKeyPair时遇到问题。我正在尝试编写一个客户端-服务器应用程序(更多的是POC),其中客户端从服务器请求公钥,服务器生成此密钥AsymmetricCipherKeyPair,内容如下privatestaticAsymmetricCipherKeyPairGenerateKeyPair(){RsaKeyPairGeneratorg=新的RsaKeyPairGenerator();g.Init(newKeyGenerationParameters(newSecureRandom(),1024));varpair=g.GenerateKeyPair();返回对;这正确生成,加密和加密正确(在服务器端,但这违背了目的)然后我向客户端发送序列化公钥privatestaticbyte[]SerialisePublic(AsymmetricCipherKeyPairkeypair){SubjectPublicKeyInfopublicKeyInfo=SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keypair。民众);byte[]serializedPublicBytes.EndToDnObject(publicKeyInfo);返回序列化公共字节;}privatestaticvoidSendBytes(TcpClientclient,byte[]send){NetworkStreamstream=client.GetStream();stream.Write(send,0,send.Length);stream.Flush();但是现在,当我尝试在另一侧初始化密钥对时,我需要一个私钥(这也违背了目的)我尝试了以下静态字符串EncryptString(stringkey,stringmessage){stringres="";使用(变量rsa=newRSACryptoServiceProvider(128)){try{rsa.FromXmlString(string.Format("{0}",key));byte[]b=Encoding.ASCII.GetBytes(消息);varencryptedData=rsa.Encrypt(b,true);varbase64Encrypted=Convert.ToBase64String(encryptedData);res=base64Encrypted;}catch(Exceptionex){}最后{rsa.PersistKeyInCsp=false;}返回资源;,我想我可以破解它)但是,由于这不包含加密所需的近一半信息,所以很难做到我想尽可能继续使用BouncyCastle,但我愿意接受建议。提前致谢。UPDATE客户端和服务器都是用C#编写的UPDATE2(感谢Andrew)这会使用服务器提供的公钥初始化RsaEngine(或至少应该)(这不起作用,不要使用它)staticbyte[]EncryptBytes(byte[]key,byte[]message){byte[]res=null;AsymmetricKeyParameteric=(AsymmetricKeyParameter)PublicKeyFactory.CreateKey(key);RsaEnginee=newRsaEngine();e.Init(true,ic);res=e.ProcessBlock(消息,0,消息长度);返回资源;更新3所以这不起作用,PublicKeyFactory似乎不喜欢返回的密钥throws:UnknownobjectinGetInstance:Org.BouncyCastle.Asn1.DerApplicationSpecific我认为这可能是服务器端的序列化问题,然后是反序列化问题在客户端。因此,当客户端连接到服务器时,CryptoStream可能用于传输公钥和其他身份验证(密码SMS、秘密敲门或笑话)。以上是C#学习教程:仅使用公钥创建AsymmetricCipherKeyPair分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
