反序列化 RSA 公钥和私钥 C#

2023-11-30

作为我的项目的一部分,我必须使用 RSA 加密一些文本,并且我从另一家公司获得了公钥。公钥如下所示:

var publicKey="MIGfMA0GCSq2GSIb3DQEBAQUAA4GNADCBiQKBgQCgFGVfrY4jQSoZQWWygZ83roKXWD4YeT2x2p41dGkPixe73rT2IW04glatgN2vgoZsoHuOPqah5and6kAmK2ujmCHu6D1auJhE2tXP+yLkpSiYMQucDKmCsWXlC5K7OSL77TXXcfvTvyZcjObEz6LIBRzs6+FqpFbUO9SJEfh6wIDAQAB" 

问题是我不知道它的格式是什么以及如何将其反序列化为RSAParameters。 Internet 上的其他示例已使用 XML 序列化。密钥由 Java 创建。

然后我还想知道如何反序列化其相关的私钥,我现在无法访问它的任何示例。

Update :

这是我的代码的一部分:

var pk = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCiiTx4F35eWP10AFMAo8MLhCKq2ryKFG9PKKWeMLQuwMSdiQq347BkMYA+Q+YscScf7weUSTk9BHVNNfTchDwzjQrIoz6TZGggqD+ufin1Ccy0Sp6QeBMnIB89JsdzQGpVcsoTxk53grW0nYY8D+rlFvBwFicKe/tmVPVMYsEyFwIDAQAB";

...

public static RSACryptoServiceProvider ImportPublicKey(string pem)
{
    //var newPem = "-----BEGIN PUBLIC KEY-----\n" + pem + "-----END PUBLIC KEY-----";
    Org.BouncyCastle.OpenSsl.PemReader pr = new Org.BouncyCastle.OpenSsl.PemReader(new StringReader(Pem));
    Org.BouncyCastle.Crypto.AsymmetricKeyParameter publicKey = (Org.BouncyCastle.Crypto.AsymmetricKeyParameter)pr.ReadObject();
    RSAParameters rsaParams = Org.BouncyCastle.Security.DotNetUtilities.ToRSAParameters((Org.BouncyCastle.Crypto.Parameters.RsaKeyParameters)publicKey);

    RSACryptoServiceProvider csp = new RSACryptoServiceProvider();// cspParams);
    csp.ImportParameters(rsaParams);
    return csp;
}

发布的密钥是 X.509 (SPKI) 格式的 PEM 编码公钥,但没有标头 (-----BEGIN PUBLIC KEY-----) 和页脚 (-----END PUBLIC KEY-----)。这可以使用 ASN.1 解析器轻松验证,例如here.

此类密钥的导入取决于 .NET 版本。.NET核心从 v3.0 开始提供直接支持导入 PKCS#1、PKCS#8 和 X.509 密钥的方法,例如RSA.ImportSubjectPublicKeyInfo对于后者。此选项不适用于.NET框架, but 充气城堡提供了同样舒适的解决方案。

Here (see ImportPublicKey方法)是一个使用 X.509 (SPKI) 格式导入 PEM 编码公钥的示例充气城堡。但是,那PemReader此处使用的数据需要完整的 PEM 数据,包括页眉和页脚,两者均通过换行符与正文分隔。因此,当使用此处发布的公钥时,必须相应地添加页眉和页脚,例如:

using System.IO;
using System.Security.Cryptography;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Security;
...
// from: https://gist.github.com/valep27/4a720c25b35fff83fbf872516f847863
public static RSACryptoServiceProvider ImportPublicKey(string pemBody)
{
    var pem = "-----BEGIN PUBLIC KEY-----\n" + pemBody + "\n-----END PUBLIC KEY-----";      // Add header and footer
    PemReader pr = new PemReader(new StringReader(pem));
    AsymmetricKeyParameter publicKey = (AsymmetricKeyParameter)pr.ReadObject();
    RSAParameters rsaParams = DotNetUtilities.ToRSAParameters((RsaKeyParameters)publicKey);

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

反序列化 RSA 公钥和私钥 C# 的相关文章

  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当

随机推荐

  • sys.getrefcount 延续

    链接文本 我明白了引用计数的概念 因此 当我执行 del astrd 时 引用计数降至零并且 astrd 被 gc 收集 这是示例代码 这些代码是我在昨天的问题之后开发的 链接文本 one py def abc print Hello pr
  • 即使查询有效,mysqli_fetch_array 也会出错;将总导出作为 NULL 值运行

    我有以下查询 该查询在查询数据库时有效 EDIT 3 根据 Joe Swindell 的建议 可能是查询中的 SET runningTotal 0 行 要解决的问题是找到一种方法将下面的复杂查询转换为 JSON 字符串 该字符串也将保存 N
  • 过滤 LogCat 以仅获取来自 Android 中的“我的应用程序”的消息?

    我观察到 当我将 Logcat 与 Eclipse 和 ADT for Android 一起使用时 我也会从许多其他应用程序收到消息 有没有办法过滤此内容并仅显示来自我自己的应用程序的消息 注 以下答案已有 10 多年历史 这可能不再是最好
  • 以干净的 Ansible 格式显示调试输出

    我正在尝试在 Ansible 中以良好的格式显示调试命令的消息输出 目前输出如下 TASK stop Report Status of Jenkins Process ok localhost gt msg Service Jenkins
  • 如何使用 Python 将文本文件转换为 Excel

    我在名为 DOT 的文件夹中有一个文本文件 textfile txt 我正在尝试使用 Python 代码将该文件转换为 Excel 文件 Excelfile xls 我不熟悉Python 但根据其他评论 我写了下面的代码 该代码不起作用 谁
  • 如何使用 Mercurial 保存用户名和密码?

    我在个人项目中使用了 Mercurial 每次想要将某些内容推送到服务器时 我都会输入用户名和密码 我尝试将以下内容添加到 hgrc文件在我的主目录中 但它似乎被完全忽略了 ui username MY USER NAME password
  • 将 pandas 数据帧作为参数传递到 python subprocess.Popen

    我正在尝试从主脚本调用 python 脚本 我只需要从主脚本中生成一个数据帧 然后将其作为在子进程内使用的参数传递给子进程脚本 以下是我尝试编写所需的 python 主脚本 from subprocess import PIPE Popen
  • 具有 json 数据源的 jQuery UI Datepicker 中的事件

    我想在 jQuery UI Datepicker 中显示事件 我希望有事件的日子的样式与没有事件的日子不同 并且我想在将鼠标悬停在有事件的日期时显示带有事件详细信息的自定义工具提示 问题的解答 jQuery UI Datepicker 与
  • Java 1.8.0 在 JDBC 连接中启用 TLS1.2

    我有一个已更新到最新补丁包的 SQL Server 2014 12 0 5207 在该环境中 唯一启用的协议是 TLS1 2 已为此目的设置注册表项 我可以使用 Management Studio 在本地和远程使用 SA 帐户连接到 SQL
  • HTML 中 id 和 name 属性的区别

    两者有什么区别id and name属性 它们似乎都具有提供标识符的相同目的 我想知道 特别是关于 HTML 表单 是否有必要或出于任何原因鼓励使用两者 The name属性在表单提交中发送数据时使用 不同的控件响应不同 例如 您可能有几个
  • QFile::copy 静态函数不复制文件

    我想复制一个文本文件QFile用这个代码 void MainWindow on pushButton 4 clicked QFile copy C p text txt C p text1 txt 当我构建它时 我没有收到任何错误 但是当我
  • 自定义 Laravel 验证消息

    我正在尝试在 Laravel 5 中创建用于验证的自定义消息 这是我迄今为止尝试过的 messages required gt Harap bagian attribute di isi unique gt attribute sudah
  • SQL Server 中的程序集定期卸载并重新加载

    SQL Server 不断加载和卸载我的程序集 将它们标记为不安全 任何想法为什么会这样做 我将日志文件附在下面 由于日志中所述的确切原因 正在卸载程序集 内存压力 您无法采取任何具体措施来防止这种情况 即没有选项来禁用此行为 您最多能做的
  • 无法在 Jupyter 的 PDF 输出中显示 Unicode 字符(如 λ)

    我正在使用 Juliajupyter notebook 我想为我的工作结果生成一个 pdf 文件 但是 在生成 pdf 时 的数学表达式 3丢失 因此 pdf 中的输出是 3 这是jupyter笔记本代码 In 1 3 Out 1 3 这是
  • C++11(本机代码)与 Java(字节码)[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 最近我一直在思考本机码和字
  • Y appium 在 ios 模拟器中循环重启应用程序?

    我尝试运行测试 ipa 但是 appium 会循环重新启动应用程序并产生此错误 INST STDERR 仪器跟踪错误 目标运行失败 无法查找已启动进程的 pid 我应该如何诊断根本原因并解决问题 在 Xcode gt Derived Dat
  • 有条件的停止计时器仅在第一次有效?

    我正在编写一个 谁想成为百万富翁 游戏 我已经设置好了一切 只是计时器有问题 游戏的运作方式是这样的 如果用户答对了问题 他 她就继续前进 如果没有 游戏就结束了 他们可以选择重新玩 当游戏第一次运行时 一切正常 计时器会执行其应有的操作
  • 即使启用了ignoreProtect模式设置,Internet Explorer也未使用selenium启动

    示例代码 from selenium import webdriver from selenium webdriver common desired capabilities import DesiredCapabilities caps
  • OctoberCMS 插件一次显示所有验证

    我在用Builder用于创建插件并在我的模型中的一个插件中进行字段验证 效果很好 假设我在我的插件中进行了类似的验证 将其称为Team 模型文件 technobrave team models Team php
  • 反序列化 RSA 公钥和私钥 C#

    作为我的项目的一部分 我必须使用 RSA 加密一些文本 并且我从另一家公司获得了公钥 公钥如下所示 var publicKey MIGfMA0GCSq2GSIb3DQEBAQUAA4GNADCBiQKBgQCgFGVfrY4jQSoZQWW