公钥和私钥作为变量 C#

2023-12-09

我正在编写一个函数,其中该函数接收我的公钥作为变量,并且该变量的值是实际的公钥。我需要 Azure 中的两个不同的功能应用程序来加密和解密。密钥必须匹配,但问题是,每次我调用 API 时,公钥都不同,我可以毫无问题地加密。但是当我必须解密时它就不起作用了。我无法对这些功能使用相同的密钥对。这就是为什么我尝试使用之前生成的密钥作为变量。

Example: string publicKey = "MMMFisIDUDHfhHSANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi7ZOKtc55v9NJuhQFR583BcFkcjflXNVMqC5/3b7t7v..."

这是我用来加密的方法:

cipher.Init(true, publicKey);

我的密钥是使用 Bouncy Castle 生成的。

RsaKeyPairGenerator g = new RsaKeyPairGenerator(); g.Init(new KeyGenerationParameters(new SecureRandom(), 2048)); AsymmetricCipherKeyPair keyPair = g.GenerateKeyPair();

使用下面的代码可以正常工作:

        string plainText = "test data here";
        byte[] plainTextToByte = Encoding.UTF8.GetBytes(plainText);

        //Generating Key Pair
        RsaKeyPairGenerator g = new RsaKeyPairGenerator();
        g.Init(new KeyGenerationParameters(new SecureRandom(), 2048));
        AsymmetricCipherKeyPair keyPair = g.GenerateKeyPair();

        //Extracting the private key from pair
        RsaKeyParameters privateKey = (RsaKeyParameters)keyPair.Private;
        RsaKeyParameters publicKey = (RsaKeyParameters)keyPair.Public;

        //Encryption proccess
        IAsymmetricBlockCipher cipher = new OaepEncoding(new RsaEngine());
        cipher.Init(true, publicKey);
        byte[] cipherText = cipher.ProcessBlock(plainTextToByte, 0, plainTextToByte.Length);
        string encryptedText = Encoding.UTF8.GetString(cipherText);
        Console.WriteLine(encryptedText);

        //Decryption Process
        cipher.Init(false, privateKey);
        byte[] decryptedText = cipher.ProcessBlock(cipherText, 0 , cipherText.Length);
        string decryptedTextToString = Encoding.UTF8.GetString(decryptedText);

        Console.WriteLine(decryptedTextToString);
        Console.ReadLine();`

我需要上面生成的键作为变量在控制台应用程序内的函数中使用。

但是当我尝试将密钥作为变量传递时,我收到以下错误:

https://i.stack.imgur.com/vLSOL.png

我可以使用 C# 中的核心类执行相同的过程,它与下面的代码类似:

C# RSA加密/解密与传输

我在上面的例子中遵循的相同逻辑现在对我不起作用。我是这一切的初学者。有没有办法做到这一点?

这是我用来获取屏幕截图上的错误的代码。密钥是使用我在原始帖子上发布的代码生成的。

    string plainText = "test here";
    byte[] plainTextToByte = Encoding.UTF8.GetBytes(plainText);

    string publicKey = "MIIBIjANBgk...DAQAB";

    IAsymmetricBlockCipher cipher = new OaepEncoding(new RsaEngine());
    cipher.Init(true, publicKey);
    byte[] cipherText = cipher.ProcessBlock(plainTextToByte, 0, plainTextToByte.Length);
    string encryptedText = Encoding.UTF8.GetString(cipherText);
    Console.WriteLine(encryptedText);

    return new OkObjectResult(encryptedText);`

Att.


我不太清楚问题是什么。但根据问题中发布的最后一个片段,您正在尝试导入公钥。根据您的倒数第二条评论,它是用 X.509/SPKI 格式导出的 PEM 编码公钥PemWriter:

-----BEGIN PUBLIC KEY-----
MIIB...
...AQAB
-----END PUBLIC KEY-----

这样的密钥可以导入并使用Cipher#Init()如下(让publicKeyPem是导出的 PEM 密钥):

using Org.BouncyCastle.OpenSsl;
...
PemReader pemReader = new PemReader(new StringReader(publicKeyPem));
RsaKeyParameters publicKeyReloaded = (RsaKeyParameters)pemReader.ReadObject();
...
cipher.Init(true, publicKeyReloaded); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

公钥和私钥作为变量 C# 的相关文章

随机推荐

  • 如何在 url asp.net mvc 4 中添加扩展名 .html?

    我有网址 http localhost 1714 Message Index 我想展示 http localhost 1714 Message Index html 我该怎么做 您需要修改 Web config 以将对 HTML 文件的请求
  • YouTube API 返回带有空列表的 nextPageToken

    这个问题与 YouTube API 500 1000 无关有意义的结果问题 我认为 YouTube API nextPageTokens 的工作方式是 一旦没有更多结果可返回 它们将为 null 但是 我看到一开始就返回了结果 但有时即使只
  • 如何将指针分配给矩阵的对角线?

    我有一个矩阵说REAL 8 MATRIX 100 100 我想仅从主对角线或上三角形创建一个指针 怎么做 目的是以干净的 命名 方式轻松访问这些元素 对于主对角线 请小心 您可以执行以下操作 PROGRAM diagonal IMPLICI
  • 过滤嵌套字典[重复]

    这个问题在这里已经有答案了 所以我有这本字典 Filme 1 Titel 20 Jahr 2 Wertung 6 Preis 50 Schauspielern a b c 2 Titel 30 Jahr 3 Wertung 7 Preis
  • 如何确定 TypeScript.Expression 对象的结果类型?

    使用 TypeScript 抽象语法树时 如何确定 TypeScript Expression 对象的结果类型 我正在使用 TSLint 并尝试查找不传递 Function 类型的对象作为第一个参数的 setTimeout 调用 例如 在下
  • 将同步调用包装在 Task.Run() 中以使其异步是否有益?

    我提出这个问题的动机是因为我正在创建一个 net Web API 项目 该项目将使用具有同步方法的现有 Neo4j Rest API 客户端 我想通过使用异步方法来利用一些性能提升 但我想避免进入 neo4j api 库并重构同步方法以返回
  • 如何在node.js服务器中自动重新连接mongo?

    假设我有一个连接到 mongoDB 的 Node js 服务器 然后 mongoDB 死亡或断开连接 当然 node js 服务器会失去连接 即使我重新启动 mongoDB node js 服务器也不会自动连接到新的 mongodb 即使它
  • 系统找不到Android Studio指定的文件

    每当我尝试运行 Android 应用程序时 我都会收到一条错误消息 Error C Users zeshan gradle caches 2 14 1 scripts remapped build 6xj57zedh3l90p9pnawvv
  • 如何在 JavaScript 中创建选项卡?

    我一直在尝试用 JavaScript 创建选项卡 当点击一个new tab the 活跃班应适用于它及其相关的面板内容应该显示 但是 那活跃班单击另一个选项卡时不会应用panels也没有改变 它们只是相互堆叠 const tabs docu
  • WPF 如何显示 Image.Source (BitmapSource) 像素位置?

    假设我有一个以缩放方式显示其来源的图像 我如何使用 MouseMove 事件在标签或文本块中显示光标所在的像素位置 我需要像素坐标而不是图像相对于其大小的坐标 提前致谢 您可以从 ImageSource 中找到实际像素的高度和宽度 Imag
  • Android 中的自动增长 ListView

    我确实搜索了与我要问的问题相关的各种问题 我只是想以清晰简单的方式提出问题 并希望得到一个清晰简单的答案 我有一个List我想向用户展示的数百个项目ListView小部件 最初 我想从 50 个项目开始 当用户滚动到底部附近时 我想添加另外
  • 对 .xml 文件中

    内的句子进行编号?

    我是一名初学者程序员 我陷入了这个可能很简单的问题 我想自动将数字添加到 xml 文件的 P 标签中包含的句子中 因此 xml 文件中的示例段落如下所示 p Sentence1 Sentence2 Sentence3 p 我想把它改造成 p
  • 如何获取函数的所有参数?

    在 JavaScript 中 我们有arguments 属性 可以让我们获取函数的参数 我一般都是这样做的 function sum var agumentCount arguments length var count 0 var sum
  • excel 替换值 N/A

    我有一行包含一些值A1 to A3 我有 1 3 N A I tried SUM A1 A3 但由于我的值为 N A 因此无法获得 3 个值的总和 我想将 N A 视为 0 并得到总和 The 总计的函数非常适合忽略错误项 AGGREGAT
  • SceneKit:是否可以在透明对象上投射阴影?

    我正在尝试在 OSX 上的 SceneKit 中的完全透明的平面上投射阴影 我在这个问题上挣扎了几个小时 但没有找到任何解决方案 我的目的是生成几个具有透明背景的对象的屏幕截图 并且只有不可见平面上的阴影 你对我如何用苹果 SceneKit
  • h2 数据库上的条件唯一索引

    我有一个带有 BIZ ID 列的 SAMPLE TABLE 当列 active 不等于 0 时 该列应该是唯一的 在 Oracle 数据库上 索引如下所示 CREATE UNIQUE INDEX ACTIVE ONLY IDX ON SAM
  • 在android中单击警报对话框中的肯定按钮后关闭活动

    我有一个名为 A 的活动 它显示项目列表 单击更新按钮时 它会显示自定义对话框 活动显示在后面 并选择项目列表 单击自定义对话框内的 订单 按钮时 自定义对话框消失 显示进度对话框 因为订单工作正在进行中 然后进度对话框在订单工作完成后关闭
  • 单个 PHP“退出;”声明阻止 Safari 中的 HTML5 视频

    奇怪的错误 在提供视频文件的 PHP 脚本中 在发送 video mp4 标头并输出 MP4 文件之前 我有一些测试条件 验证令牌 确保文件存在等 如果任何测试失败 fail被赋予一个非假值 测试结束时有这个if陈述 if fail exi
  • 如何在 Objective-C 中发出 API 请求来获取私有 Vimeo 视频?

    我正在开发一个 iOS 应用程序来播放私人 Vimeo 视频 私人视频被赋予隐藏来自 Vimeo 网站的视频的隐私和指定的域 以便这些视频只能在我的网站上购买和播放 我有 Vimeo PRO 帐户 我正在使用 VIMNetworking S
  • 公钥和私钥作为变量 C#

    我正在编写一个函数 其中该函数接收我的公钥作为变量 并且该变量的值是实际的公钥 我需要 Azure 中的两个不同的功能应用程序来加密和解密 密钥必须匹配 但问题是 每次我调用 API 时 公钥都不同 我可以毫无问题地加密 但是当我必须解密时