【问题标题】:How can i send a RsaKeyParameters to a server or vice versa?如何将 RsaKeyParameters 发送到服务器,反之亦然?
【发布时间】:2016-09-21 10:00:03
【问题描述】:

我正在使用 Xamarin Forms 上的 Bouncy Castle 进行不对称加密。但我正在研究客户端 Web Api 结构。我如何将公钥发送到另一方?因为类型是 RsaKeyParameters 。

RsaKeyPairGenerator rsaKeyPairGnr = new RsaKeyPairGenerator();
rsaKeyPairGnr.Init(new KeyGenerationParameters(new SecureRandom(), 512));
AsymmetricCipherKeyPair keyPair = rsaKeyPairGnr.GenerateKeyPair();
RsaKeyParameters publicKey = (RsaKeyParameters)keyPair.Public;

【问题讨论】:

  • util.PublicKeyFactory? - 抱歉,漫长的一天,编程没有意义了;)
  • 使用base64url,有一个RFC解释。
  • @MaartenBodewes 我编辑了帖子!我得到了答案。谢谢!
  • 创建答案比编辑答案更好。不客气。

标签: c# encryption xamarin rsa encryption-asymmetric


【解决方案1】:

如果我有 RsaKeyParameters publicKey 并且我需要将其发送到服务器,我可以使用以下方法进行转换:

//convert from key to string
SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(publicKey);
byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded();    
string serializedPublic = Convert.ToBase64String(serializedPublicBytes);
And then, i can convert the serializedPublic to RsaKeyParameters publicKey

//convert from string to key
RsaKeyParameters publicKey2 = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(serializedPublic));

但是有人能告诉我通过 Http 库通过查询字符串传递公钥是否是个好主意吗?

【讨论】:

  • 主要问题是攻击者可以替换公钥。您需要以某种方式建立对该公钥的信任...
  • @MaartenBodewes 但是使用公钥他可以加密!我可以把它给每个人......这就是同步和异步加密之间的区别。
  • 这样想:证书链和 CA 之类的东西是有原因的。如果就这么简单,网站只需向您发送他们的公钥 - 不需要受信任的第三方和公钥基础设施。或者对于您创建“信任网络”的 PGP。我猜你需要学习密钥管理。
  • @MaartenBodewes 但我也为 OAEP 实现了密码对象以使用填充!!
猜你喜欢
  • 1970-01-01
  • 2013-01-20
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 2010-12-30
  • 1970-01-01
  • 2021-05-28
相关资源
最近更新 更多