Metro 风格应用中的 RSA 加密

2024-01-09

我有公钥模数和公钥指数,我需要生成公钥并在 Metro 风格应用程序中加密数据。在 C# 中,我们有 RSAParameters 类,但我找不到任何适用于 Metro 风格应用程序的此类内容。

当我使用直接从证书接收的 base64 编码的公钥并尝试使用以下代码导入密钥时,我收到抛出异常 ASN1 bad tag value met 。 我认为这是由于数据格式无效造成的。

     //sample dummy key from certificate in base64encoded
     string key =   @"MIIB0zCCAX2gAwIBAgIJAMF/bHcA799IMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTIwMzI3MTEyNjQ5WhcNMTMwMzI3MTEyNjQ5WjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMEPeWjP4sdqxvBlDId4BtRRTeWPwjlZLSOFvOVgmoSyoPva8psFUF6tH9/vPXIJrL80tdCoBt8YFH6pwDN9a1sCAwEAAaNQME4wHQYDVR0OBBYEFGARqQfUhX7atVU4sS+aQAPt/jFxMB8GA1UdIwQYMBaAFGARqQfUhX7atVU4sS+aQAPt/jFxMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADQQALqOyjovRbWUZvziVaE8QYy83WEln1l+HJU9D6tFncUZTlwSd8aUwyQsd3zOVNZ41oCAVv5R3h1jtBtPbM+c1K";
       symmetricKeyAlgorithmProvider asymmAlg = AsymmetricKeyAlgorithmProvider.OpenAlgorithm("RSA_OAEP_SHA1");
       CryptographicKey publicKey = asymmAlg.ImportPublicKey(CryptographicBuffer.DecodeFromBase64String(key));
        string input64string ="encrypt this";
        IBuffer dataToEncrypt = CryptographicBuffer.DecodeFromBase64String(input64string);
        IBuffer encryptedData = CryptographicEngine.Encrypt(publicKey, dataToEncrypt, null);

Your key是公钥的模数部分,其长度为128。考虑从metro中的C#代码导出的标准密钥:

using System.Runtime.InteropServices.WindowsRuntime;
CryptographicKey standardKeyPair = provider.CreateKeyPair(1024);
byte[] standardKey = standardKeyPair.ExportPublicKey(CryptographicPublicKeyBlobType.Pkcs1RsaPublicKey).ToArray();

可以看到byte[] standardKey的长度是140,有7位前缀和5位尾部。我不知道原因,但我将额外的 12 位复制到已知密钥中,它有效。希望这对您有帮助:

public static IBuffer RsaEncrypt(this IBuffer dataToEncrypt, string publicKeyN)
{
    AsymmetricKeyAlgorithmProvider provider = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1);

    CryptographicKey standardKeyPair = provider.CreateKeyPair(1024);
    byte[] standardKey = standardKeyPair.ExportPublicKey(CryptographicPublicKeyBlobType.Pkcs1RsaPublicKey).ToArray();
    var data_n = CryptographicBuffer.DecodeFromBase64String(publicKeyN).ToArray();
    Array.Copy(data_n, 0, standardKey, 7, data_n.Length);
    var key = provider.ImportPublicKey(standardKey.AsBuffer(), CryptographicPublicKeyBlobType.Pkcs1RsaPublicKey);

    var result = CryptographicEngine.Encrypt(key, dataToEncrypt, null);
    return result;          
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Metro 风格应用中的 RSA 加密 的相关文章

随机推荐

  • 在 Mac OS X 下模拟 Linux 二进制文件

    如何在 Mac OS X 下运行 Linux 二进制文件 谷歌搜索后 我发现了几个模拟器 但没有一个可以在 Mac 上运行 Linux 二进制文件 有很多关于在 Linux 上运行 Mac OS X 之类的帖子 但这与我想做的相反 Upda
  • 当`pip install virtualenv`输出`using cached virtualenv`时virtualenv是否安装正确?

    背景 我正在 Mac OS High Sierra 上开发 Flaskr Web 项目 正在安装 Flask 阶段 我在安装 virtualenv 时遇到了问题 http flask pocoo org docs 0 12 tutorial
  • 快速处理 XML 解析响应

    下面是我使用集成密钥 用户名和密码向 Web 服务发送 SOAP 消息的代码 我能够获得响应并将其一直解析到foundCharacters 现在我需要存储在解析的响应中找到的两个元素 以便稍后我可以将它们用于另一个请求 我一直在寻找教程 但
  • 将表单大小调整限制为水平[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的垂直 仅 可调整大小的窗口窗体 https stackoverflow com questions 2140882 vertically only resizable windows form
  • 结账后詹金斯失败,没有错误

    我的管道定期失败 这就是我所看到的 Pipeline cleanWs WS CLEANUP Deleting project workspace WS CLEANUP Deferred wipeout is used WS CLEANUP
  • 相对导入中超出顶级包错误[重复]

    这个问题在这里已经有答案了 似乎这里已经有很多关于 python 3 中相对导入的问题 但是在浏览了其中许多问题之后 我仍然没有找到我的问题的答案 所以这是问题 我有一个如下所示的包 package init py A init py fo
  • 如何在 C# 中使用 TaskScheduler 设置“仅在登录时运行”和“运行方式”?

    我正在尝试使用 c 任务计划程序托管包装器以编程方式在 Windows 系统上生成计划任务 我可以生成任务 但只能在帐户登录时才能运行它 我一直在环顾四周 发现了去年提出的另一个问题 但要么还有其他未提及的相关设置 要么代码库中的某些内容从
  • setup.py dependency_links Pypi 名称冲突

    我有一个非 Pypi 软件包 我想使用它来安装setup py文件 所以我将其包含在dependency links dependency link package url tar gz 问题是 Pypi 上有另一个同名的包 所以setup
  • 在 Fluent NHibernate 中处理与值类型的一对多关系

    我正在致力于将应用程序迁移到 NHibernate 并且我正在使用 Fluent NHibernate 我遇到了将值类型集合映射到聚合根的问题 我有一个PhoneNumber具有一些属性的值类型 Number NumberType and
  • 开源 Jalopy Eclipse 插件与 Ganymede 兼容吗?

    经过一番搜索 我找到了下载老爷车的 Eclipse 版本 http sourceforge net project showfiles php group id 45216 这与 Eclipse 3 4 兼容吗 日期是 2006 年 我已将
  • 在 Postgres 中将十六进制字符串转换为 bigint [重复]

    这个问题在这里已经有答案了 我想将 HTML 使用的十六进制字符串转换为bigint然后通过用 PL pgSQL 编写的函数将其转换为 Postgres 中单独的 R G 和 B 值 我可以将字符串解码为bytea像这样 hex bytea
  • 如何在 Windows 中的 VS Code 集成终端中输入内容?

    在 Linux 中 我可以毫无问题地在集成终端中输入内容 我可以输入用户输入并输出 在 Windows 上 我不能这样做 输出显示在调试控制台中 但我无法在该控制台或集成终端中输入内容 在图中 我在 C 中运行时没有进行调试 当我要求输入时
  • 有没有办法从字符串中删除除字符、数字和“-”之外的所有内容

    我对正则表达式真的很糟糕 但这就是我想要实现的目标 StringOne 5 e 4 e e 0 5 3 5 e b e e 5 0 a 4 3 3 1 9 0 8 1 b 3 6 1 b 3 6 4 d 3 3 2 0 c c 1 c 1
  • config.assets.precompile 不添加供应商/gem 资产

    我无法将供应商资源编译为根文件 我希望以下资产可以独立使用 不与其他资产打包在一起 vendor gems neo viz app assets stylesheets neo viz css scss vendor gems neo vi
  • iOS:为什么我无法让 Mapkit 显示自定义注释图钉图像?

    我认为使用我自己的自定义引脚图像进行注释会非常容易 但我从来没能让它发挥作用 我也不知道为什么 我只是使用 MKAnnotationView mapView MKMapView mapView viewForAnnotation id
  • C 管道、fork、dup 和 exec()

    我正在尝试通过管道将字符串列表传递到应该显示的子进程 bin cat using execl 我早些时候就让它工作了 只是管道没有关闭 所以程序一直在等待 不知道我做了什么 现在根本不起作用 有人可以查看我的代码并告诉我我做错了什么吗str
  • base64编码总是一对一的吗

    Base64编码算法的两个不同输入是否有可能获得两个相同的编码值 让我们使用另一种算法 例如用字母 X 替换下划线的函数 Foo Bar FooXBar FooXBar FooXBar Base64 编码会发生这种事情吗 不 这不可能发生
  • 游戏框架中的多个数据库

    我正在尝试与另一台服务器上的另一个数据库建立第二个数据库连接 我们使用的是 play 框架 1 2 4 我找到了以下 1 2 3 的文档 http www playframework org documentation 1 2 3 mode
  • WinRT 中的 HttpUtility.ParseQueryString 方法在哪里?

    Since Http实用程序 http msdn microsoft com en us library system web httputility aspx在 WinRT 中不可用 我想知道是否有一种简单的方法来解析 HTTP 查询字符
  • Metro 风格应用中的 RSA 加密

    我有公钥模数和公钥指数 我需要生成公钥并在 Metro 风格应用程序中加密数据 在 C 中 我们有 RSAParameters 类 但我找不到任何适用于 Metro 风格应用程序的此类内容 当我使用直接从证书接收的 base64 编码的公钥