我需要使用winrt应用程序从服务中检索的公共RSA密钥。
var decodedKey = CryptographicBuffer.DecodeFromBase64String(serverKey.Value);
因此,该服务为我的应用程序提供了一个基本的64位编码字符串,这是一个公共rsa密钥。密钥是使用RSA PKCS1填充创建的。
从一段时间后参考这篇文章: Windows 8 Metro RSA Encryption: AsymmetricKeyAlgorithmProvider ImportPublicKey Fails
这正是我想要做的。虽然确实将blob类型更改为Pkcs1之外的其他内容(如BCryptPublicKey或Capi1PublicKey)将允许导入服务器公钥,但这只是一个hack而不是解决方案。
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);
数据是IBuffer的地方。我几乎可以肯定地收到另一个例外,因为公钥是以不存在的格式导入的(Pkcs1与Capi1 / BCrypt相比)。例外是ArgumentException,消息“Value不在预期范围内。”。我确实试过给这个方法一些arbirtraru iv缓冲区而不是null,这没有效果。
如何让.Net 4.5生成的密钥与WinRt互操作?