2016-09-20 134 views
1

我在Xamarin Forms上使用Bouncy Castle进行非对称加密。但我正在致力于客户端< - > Web Api结构。我怎样才能将公钥发送给对方?因为类型是RsaKeyParameters。如何发送RsaKeyParameters到服务器,反之亦然?

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

'util.PublicKeyFactory'? - 对不起,漫长的一天,再也没有什么意义了) –

+0

使用base64url,有一个RFC解释它。 –

+0

@MaartenBodewes我编辑的帖子!我得到了答案。谢谢! –

回答

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库是通过公共密钥一个好主意 ?

+0

主要问题是攻击者可以替换公钥。你以某种方式需要建立对该公钥的信任... –

+0

@MartartBodewes但是用公钥可以加密!我可以把它给大家......这就是同步和异步加密之间的区别。 –

+0

这样想:证书链和CA之类的东西是有原因的。如果这很简单,网站只需将您的公钥发送给您 - 无需可信的第三方和公钥基础设施。或者为PGP创建一个“信任网络”。我想你需要研究关键管理。 –

相关问题