winrt アプリがサービスから取得する公開 RSA キーを使用する必要があります。
var decodedKey = CryptographicBuffer.DecodeFromBase64String(serverKey.Value);
したがって、このサービスは、公開 RSA キーである base 64 でエンコードされた文字列をアプリに配信します。キーは、RSA PKCS1 パディングを使用して作成されます。
しばらく前の投稿を参照してください: Windows 8 Metro RSA 暗号化: AsymmetricKeyAlgorithmProvider ImportPublicKey Fails
それがまさに私がやろうとしていることです。ブロブ タイプを BCryptPublicKey や Capi1PublicKey などの Pkcs1 以外のものに変更すると、サーバーの公開キーをインポートできるようになりますが、これは単なるハックであり、解決策ではありません。
var provider = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1);
var decodedKey = CryptographicBuffer.DecodeFromBase64String(serverKey.Value);
var publicKey = provider.ImportPublicKey(decodedKey, CryptographicPublicKeyBlobType.Capi1PublicKey);
次のステップに進むと、次のようになります。
var encryptedBuffer = CryptographicEngine.Encrypt(publicKey, data, null);
data は IBuffer です。公開鍵がインポートされていない形式 (Pkcs1 と Capi1/BCrypt) でインポートされたため、ほぼ確実に別の例外を受け取りました。例外は、「値が期待される範囲内にありません」というメッセージを含む ArgumentException です。このメソッドにnullの代わりにarbirtraru ivバッファを与えてみましたが、効果はありませんでした。
.Net 4.5 で生成された ket を WinRt と相互運用するにはどうすればよいですか?