1

我需要使用 winrt 应用程序从服务中检索的公共 RSA 密钥。

var decodedKey = CryptographicBuffer.DecodeFromBase64String(serverKey.Value);

因此,该服务为我的应用程序提供了一个 base 64 编码的字符串,它是一个公共 rsa 密钥。密钥是使用 RSA PKCS1 填充创建的。

不久前参考这篇文章: Windows 8 Metro RSA Encryption: AsymmetricKeyAlgorithmProvider ImportPublicKey Fails

这正是我想要做的。虽然确实将 blob 类型更改为 Pkcs1 以外的其他类型,例如 BCryptPublicKey 或 Capi1PublicKey 将允许导入服务器公钥,但这只是一种技巧,而不是解决方案。

        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。我确实尝试给这个方法一些 arbirtraru iv 缓冲区而不是 null,但这没有效果。

如何让 .Net 4.5 生成的 ket 与 WinRt 互操作?

4

0 回答 0