将.Net 4.5中的RSA PKCS1公钥导入Winrt

时间:2013-11-02 20:47:01

标签: c# security windows-runtime cryptography

我需要使用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互操作?

0 个答案:

没有答案