C# RSA 使用给定的 PKCS#1 公钥加密文本

2023-11-24

我正在尝试编写一个函数,接收要编码的字符串和公钥作为 PKCS#1 格式的 Base64 编码字符串,并返回编码字符串。

    public static string EncryptRsa(string stringPublicKey, string stringDataToEncrypt)
{
    byte[] publicKey = Convert.FromBase64String(stringPublicKey);

    // Code to create an RSACryptoServiceProvider with the public key
    // var rsa = new RSACryptoServiceProvider(??)

    byte[] dataToEncrypt = Encoding.UTF8.GetBytes(stringDataToEncrypt);
    var encryptedData = rsa.Encrypt(dataToEncrypt, true);
    return Convert.ToBase64String(encryptedData);
}

在过去的几天里,我看到了许多有关如何使用 RSA 算法进行加密的问题和答案,但没有找到有关当我已经拥有现有密钥(特别是采用 PKCS#1 格式)时如何创建 RSACryptoServiceProvider 的信息,仅介绍如何生成密钥对。

例如:给定以下字符串,我将如何使用 RSA 加密来加密数据?

-----开始公钥----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0 FPqri0cb2JZfXJ/DgYSF6vUpwmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/ 3j+skZ6UtW+5u09lHNsj6tQ51s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQAB

-----结束公钥-----

Thanks!!


您可以使用充气城堡,一个 .NET 库,允许您将 PKCS#1 格式的密钥转换为可用于加密和解密的实际密钥参数。

由于您拥有的公钥被格式化为 PKCS#1 base64 编码值。然后您可以使用 BouncyCastle 将公钥解码为 ASN.1 对象,如下所示

您必须从以下内容中删除“-----BEGIN PUBLIC KEY-----”和“-----END PUBLIC KEY-----”stringPublicKey在您继续之前。

Asn1Object obj = Asn1Object.FromByteArray(Convert.FromBase64String(stringPublicKey));

然后,如指定RFC 3447 (A 1.1):

DerSequence publicKeySequence = (DerSequence)obj;

DerBitString encodedPublicKey = (DerBitString)publicKeySequence[1];
DerSequence publicKey = (DerSequence)Asn1Object.FromByteArray(encodedPublicKey.GetBytes());

DerInteger modulus = publicKey[0];
DerInteger exponent = publicKey[1];

在这里,您拥有创建公钥所需的一切:

RsaKeyParameters keyParameters = new RsaKeyParameters(false, modulus.PositiveValue, exponent.PositiveValue);

然后,BouncyCastle 提供了一种简单的方法将其转换为 .NET 兼容的RSAParameters:

RSAParameters parameters = DotNetUtilities.ToRSAParameters(keyParameters);

然后您可以轻松地将关键参数导入到RSACryptoServiceProvider:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(parameters);

最后,进行加密:

byte[] dataToEncrypt = Encoding.UTF8.GetBytes(stringDataToEncrypt);
byte[] encryptedData = rsa.Encrypt(dataToEncrypt, true);
return Convert.ToBase64String(encryptedData);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# RSA 使用给定的 PKCS#1 公钥加密文本 的相关文章

  • C# - Visual Studio 中的 System.OutOfMemoryException

    我遇到问题 当我右键单击 Visual Studio 中的主窗体并转到 视图设计器 时 出现错误 它说 引发了 System OutOfMemoryException 类型的异常 堆栈跟踪 at System Reflection Asse
  • 无需登录即可在 Intranet 上获取 Web 应用程序的域\用户名

    我的 Intranet 上有一个 Web 应用程序 VS 2005 有几个页面不需要用户登录应用程序 反馈和默认页面 我正在尝试获取要显示和 或发送反馈的域名和用户名 有没有一种方法可以在不需要用户登录的情况下执行此操作 我试过了this
  • BufferBlock 连续

    我想使用以下方式实现消费者 生产者模式BufferBlock
  • 是否有可能将 *.pdb 文件包含到发布版本中以查看错误行号?

    我做了一个项目 所有设置都是默认的 当我在调试模式 构建配置 调试 下运行它并遇到异常时 它转储到我的自定义日志记录机制 其中包含错误行号 但是当我运行发布构建时 记录相同的异常 没有行号 只有方法抛出和记录调用堆栈 是否有可能在发布配置
  • 何时使用 C++ 私有继承而不是组合?

    你能给我一个具体的例子吗 什么时候使用私有继承优于组合 就我个人而言 我将使用组合而不是私有继承 但在某些情况下 使用私有继承可能是特定问题的最佳解决方案 正在阅读C faq http www parashift com c faq lit
  • 尽管浮点数相同,但它们并不相等? [复制]

    这个问题在这里已经有答案了 下面的程序输出This No is not same 当两个数字相同时为什么会这样做 void main float f 2 7 if f 2 7 printf This No is same else prin
  • 如何在 ASP.NET Core 6.0 Web API 项目中启用 cors?

    在我的 ASP NET Core 6 0 Web API 项目中配置了 CORS 但预检请求收到 http 405 错误 换句话说 不允许使用 HTTP OPTION 看起来 cors 没有启用 我见过的例子config EnableCor
  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • C# 实体框架我们应该使用 POCO.Id 还是仅使用 POCO 设置关系?

    我在服务方法中遇到一种情况 将 POCO 分配为另一个 POCO 的子对象无法按预期工作 我正在使用实体框架 4 public void ChangeOrderCurrency Currency currency order Currenc
  • 使用默认行为将模型绑定到接口

    我正在尝试将控制器操作绑定到接口 但仍保持默认的绑定行为 public class CoolClass ISomeInterface public DoSomething get set ISomeInterface public clas
  • AcceptSocket 超时?

    是否有可能AcceptSocket on a TcpListener具有超时的对象 以便它偶尔被中断 TcpListener server new TcpListener localIP port server Start while sh
  • 应用新设置时如何防止 GraphicsDevice 被丢弃?

    我的游戏窗口允许手动调整大小 这意味着它可以像任何其他普通窗口一样通过拖动其边缘来调整大小 游戏还利用了RenderTarget2D rt2d 在主 Draw 方法中设置主渲染目标 GraphicsDevice SetRenderTarge
  • += 运算符在 C++ 中是如何实现的?

    这是我一直在思考的一个问题 但从未找到任何资源来说明这个问题的答案 事实上它不仅是为了 也适用于它的兄弟姐妹 即 等等 当然不是 考虑这个例子 int a 5 a 4 this will make a 9 现在考虑等效表达式 a a 4 T
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • XCode std::thread C++

    对于学校的一个小项目 我需要创建一个简单的客户端 服务器结构 它将在路由器上运行 使用 openWRT 并且我试图在这个应用程序中使用线程做一些事情 我的 C 技能非常有限 所以我在internet https stackoverflow
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 检查另一种形式的线程是否仍在运行

    我有一个涉及两个窗体的 Windows 窗体应用程序 子表单用于将数据导出到 CSV 文件 并使用后台工作者写入文件 当这种情况发生时 我隐藏了表格 当后台工作程序运行时 父窗体仍然处于活动状态 因此即使后台工作程序正在写入文件 用户也可以
  • 使用 apachesoap:使用 .net 在 Web 服务中映射复杂数据类型

    我有一个用 Coldfusion 编程的 Web 服务 我试图使用 c net 来使用它 特定的 Web 服务返回一个 Coldfusion 结构 具有键和值的项目的集合 该结构由 Web 服务公开为 apachesoap Map 类型的复
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收
  • 如何创建实体集或模型而不在数据库中创建相应的表 - 实体框架

    我的 sqlserver 数据库中有一个存储过程 它返回多个结果集 我正在使用 msdn 中的以下链接从实体框架中的 SP 读取多个结果集 https msdn microsoft com en us library jj691402 v

随机推荐

  • 模态引导程序内的表单

    我有一个进行产品注册的模式 我想在模式内提交表单而不离开模式 a href myModal class btn Launch demo modal a div class modal hide fade div class modal he
  • 如何在BottomBar布局android中添加中间按钮

    我想在底部栏布局的中间添加像超大按钮这样的 facebook Messenger 但很困惑如何添加 脸书信使 我正在使用 ahbottomnavigation 库来制作我的底栏 我只是想让它变得简单 而不是专业类型 看这里 BottomSh
  • Ruby 脚本中的 Unicode 字符?

    我想编写一个 Ruby 脚本 将日语字符写入控制台 例如 puts 今日 但是 我在运行时遇到异常 jap rb 1 Invalid char 377 in expression jap rb 1 Invalid char 376 in e
  • 检测 Firebase 连接是否丢失/恢复

    是否有一种策略可以在当前的 Firebase 产品中起作用来检测服务器连接是否丢失和 或恢复 我正在考虑移动设备的一些离线意外情况 并且我希望有一种可靠的方法来确定 Firebase 数据层何时可用 这是一项普遍要求的功能 我们刚刚发布了
  • 默认参数作为非静态成员变量

    我想创建一个具有两个整数成员变量的类和一个具有两个可选参数的函数 如果提供了这些参数 该函数将返回它们的总和 如果未提供这些参数 则该函数返回其两个成员变量的总和 这是代码 class Foo private int x int y pub
  • Python 中列表中最长的元素链

    我有一个国家列表 我想要最长的国家路径 其中选择的每个国家必须以与前一个元素结尾相同的字母开头 nations albania andorra austria belarus belgium bosnia and herzegovina b
  • 从 adb 向 BroadcastReceiver 发送意图

    我有 BroadcastReceiver 类 public class IntentReceiver extends BroadcastReceiver final String tag Intent Intercepter Overrid
  • 将图像从 iPhone 发布到 .NET Web 服务时出现“System.InvalidOperationException:请求格式无效:multipart/form-data”错误

    我正在尝试将 iPhone 应用程序中的图像发布到 Net Web 服务 但遇到了此错误 我已经更新了我的 web config这篇知识库文章我可以成功发布到以字符串作为参数的方法 我的问题是尝试用图像发布数据 我尝试过发帖this way
  • 项目中的 build.gradle 与应用程序中的 build.gradle

    我在 Android Studio 中使用 IntelliJ 启动了一个项目 该项目包括两个文件 名为build gradle 文件夹下有一个app 其中一个位于主文件夹下 这是我的项目名称 比如说MyProject 为什么需要两个 两者有
  • CALayer.contents 在 AVMutableComposition 中无法正确呈现

    我有一个非常简单的方法 可以生成一个视频 该视频具有覆盖整个视频合成的静态背景图像和位于视频底部的较小的部分透明图像 水印样式 背景图像渲染正确 并且与图像查看器中的外观完全相同 然而 应该在视频底部渲染的图像是倾斜 扭曲的 源代码可以在
  • 为什么实例变量是final的?

    I read 这个问题关于不可变对象 并留下了关于不可变对象和最终字段的问题 为什么不可变类中的实例变量需要是final的 例如 考虑这个不可变的类 public final class Immutable private final in
  • Pandas 数据框组:对一列求和,从其他列中取出第一个元素

    我有一个熊猫数据框 x pd DataFrame from dict row 1 1 2 2 3 3 3 add 1 2 3 4 5 6 7 take1 a b c d e f g take2 11 22 33 44 55 66 77 ra
  • TFS 通过名称获取用户

    我正在尝试添加由 Excel 中的 TFS API 运行的测试 在 Excel 的一个字段中 我得到了执行测试的用户 我想在服务器中更新它为了更新它我需要让用户作为TeamFoundationIdentity ims tfs GetServ
  • C 中的可移植嵌套函数

    是否可以使用嵌套函数 块编写可移植的 C 代码 我知道 gcc 仅支持嵌套函数作为非标准扩展 而 clang 仅支持块 但有没有办法编写可以使用标准 C 和 MACROS 来编译的代码 如果不可能 最好的解决办法是什么 举个例子 如何实现以
  • 使用委托条件对 C# 列表进行二分搜索

    我有一个List
  • document.defaultView.getCompulatedStyle 和 window.getCompulatedStyle 之间有什么区别

    当获取元素的样式时 我们总是使用 if document defaultView document defaultView getComputedStyle 检查浏览器是否支持该方法 为什么不使用if window getComputedS
  • Jenkins不允许同一作业在同一节点上同时运行?

    我有 4 个节点和 2 个作业 任何节点可以同时运行2个作业 并且任何作业都可以并发执行 我希望能够限制在同一台机器上同时运行相同的作业 例如 职位 J1 和 J2 节点 N1 N2 N3 和 N4 我可以在同一个节点上同时运行 J1 和
  • bash - 删除所有 Unicode 空格并替换为普通空格

    我有一个包含很多文本的文件 并且混合有特殊的space人物 那些是统一码空间 我需要将它们全部替换为normal 空间 字符 轻松使用 perl perl CSDA plE s s g file 但正如 mklement0 在评论中正确所说
  • DATETIME 字段上的 GROUP BY 月份

    我在 mysql 中有以下查询 SELECT title added on FROM title 结果如下 Somos T o Jovens 2013 10 10 16 54 10 Moulin Rouge Amor em Vermelho
  • C# RSA 使用给定的 PKCS#1 公钥加密文本

    我正在尝试编写一个函数 接收要编码的字符串和公钥作为 PKCS 1 格式的 Base64 编码字符串 并返回编码字符串 public static string EncryptRsa string stringPublicKey strin