2016-09-20 2 views
1

私はXamarinフォームの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

@MaartenBodewesしかし、公開鍵を使って、彼はただ暗号化することができます!私は全員にそれを与えることができます...それは同期と非同期の暗号の違いです。 –

+0

このように考える:証明書チェーンやCAのようなものには理由があります。それが簡単だった場合、ウェブサイトはあなたに公開鍵を送るだけで済みました - 信頼できる第三者と公開鍵基盤の必要はありません。または、「信頼のWeb」を作成するPGPの場合私は鍵管理を勉強する必要があると思います。 –

関連する問題