c# – System.IO.IOException:—– END RSA PRIVATE KEY未找到

我正在尝试使用 PHP为服务器和客户端的C#表单应用程序创建一个在线数据库应用程序.
在服务器上,我使用带有PHPSecLib的公共RSA密钥加密一个简单的字符串.然后C#应用程序接收该字符串并尝试使用相应的私钥解密它.
字节在服务器上进行base64编码,并通过C#再次解码为字节.我使用PHPSecLib创建了密钥对.

这是我在客户端应用程序上使用的代码:

public string rsa_decrypt(string encryptedText,string privateKey) {
        byte[] bytesToDecrypt = Convert.FromBase64String(encryptedText);
        Pkcs1Encoding decrypter = new Pkcs1Encoding(new RsaEngine());
        //the error occurs on this line:
        AsymmetricCipherKeyPair RSAParams = (AsymmetricCipherKeyPair)new PemReader(new StringReader(privateKey)).ReadObject();

        decrypter.Init(false,RSAParams.Private);
        byte[] decryptedBytes = decrypter.ProcessBlock(bytesToDecrypt,bytesToDecrypt.Length);
        string decryptedString = Convert.ToBase64String(decryptedBytes);
        return decryptedString;
    }

但是,我在上面指定的行上得到以下错误^.

An unhandled exception of type ‘System.IO.IOException’ occurred in
BouncyCastle.Crypto.dll

Additional information: —–END RSA PRIVATE KEY not found

我相信密钥对组合没有任何问题,因为在我尝试解密任何东西之前我得到了一个错误.
privateKey参数当前使用以下格式硬编码到脚本中:

string privateKey = "-----BEGIN RSA PRIVATE KEY-----XXXXXXXX-----END RSA PRIVATE KEY-----";

所以在我看来,页脚实际上包含在字符串中……我已调试并用谷歌搜索,但我似乎无法解决它.我对RSA和Bouncycastle很新,所以也许我只是使用了错误的方法.

希望你能帮忙,谢谢!
– G4A

附:这是我的第一个Stackoverflow问题,我刚刚创建了一个帐户,所以如果你也可以给我一些关于我提出这个问题的方式的反馈;大!

解决方法

您需要在前/后封装边界文本和Base64数据之间添加一个新行,因此:
string privateKey = "-----BEGIN RSA PRIVATE KEY-----\r\nXXX\r\n-----END RSA PRIVATE KEY-----";

这是因为pem规范允许在两者之间存在其他文本标题.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


ASP.NET 提供一个功能完整的缓存引擎,页面可使用该引擎通过 HTTP 请求存储和检索任意对象.缓存的生存期与应用程序的生存期相同,也就是说,当应用程序重新启动时,将重新创建缓存。 将数据添加到缓存中 1。通过指定其键和值将项添加到缓存中 Cache["txt"] = &qu
问题描述 Xamarin使用IsGroupingEnabled="true"之后再Cell操作就会出现数据展示bug,数据不刷新的问题,如下图所示: 点击取消的是其他钢厂,但ViewCell展示的一直是“长峰”,这就分组试图一个比较常见的bug。 解决方案 在Tapped事件移除
一、设备类是Xamarin重要开发组成部分,下面介绍一下设备类的主要用法: 更多Device相关信息请访问:https://developer.xamarin.com/guides/xamarin-forms/platform-features/device/ 二、第三方弹窗,模态窗口 先看效果图:
大家都知道,一个英文=1字节,一个汉字2字节,而一个emoji表情=4个字节,在有这三种混用的时候,比如app聊天界面,那么删除和截取便成了很头痛的事情。 问题描述 截取导致乱码,如下图: 解决方案 使用C#里面的Substring进行截取一个长度,截取完成之后判断截取的是否为乱码,如果是乱码,在进
概念:CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 现象:如请求出现:Response to prefligh
1.Xamarin调用WebView: 原理:Xamarin.Forms WebView内置方法xx.Eval(..)可以调用到页面里面的js函数。 WebView展示的代码如下: 调用核心代码: 效果如下: 2.WebView调用Xamarin: 原理:WebView通过Navigating改变事
实现思路 1.标识控制器有拦截特性; 2.控制器拦截处理; 代码实现 1.标识控制器有拦截特性,代码: 2.控制器拦截处理,代码:
一、聚合函数查询 二、删除操作 三、执行事物(Net4.0以上版本支持) 需要添加引用:using System.Transactions;
本类适用于比较2个字符的相似度,代码如下: using System; using System.Collections.Generic; using System.Text; public class StringCompute { #region 私有变量 /// <summary>
思路:使用随机向量,把随机向量放入密文中,每次解密时从密文中截取前16位,其实就是我们之前加密的随机向量。 代码 调用:
题目: C#实现代码如下: using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.
扯淡 随着app应用的崛起,后端服务开发的也越来越多,除了很多优秀的nodejs框架之外,微软当然也会在这个方面提供更便捷的开发方式。这是微软一贯的作风,如果从开发的便捷性来说的话微软是当之无愧的老大哥,只是鱼和熊掌不能兼得,各种语法糖带来开发的便利势必会牺牲程序运行的性能,这是无可避免的,通用和效
前言 Asp.net/C#操作Excel已经是老生长谈的事情了,可下面我说的这个NPOI操作Excel,应该是最好的方案了,没有之一,使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。NPOI是构建在P
续《是时候开始用C#快速开发移动应用了》刷屏之后,把C#开发移动应用的技术 => Xamarin,在这里和大家做一个分享! 语音合成:也被称为文本转换技术(TTS),它是将计算机自己产生的、或外部输入的文字信息转变为可以听得懂的、流利的口语输出的技术。 技术选型:语音合成初步选择有两个,一是讯
目录 一、什么是Windows 服务? 二、创建Windows 服务与安装/卸载批处理。 三、调试Windows 服务。 正文 一、什么是Windows 服务? 答:Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行
高拍仪拍照SDK开发下载地址:点击下载 本SDK适用于:良田影像S300L|S500L 高拍仪如图: SDN开发包安装之后找到安装目录,如图: 大家找到各自需要的版本即可,需要注意的是如果需要上传图片到服务器的话,我已经写好了C#版的接收程序,代码如下: JavaScript调用上传服务器代码: 百
1 在Visual Studio 中创建一个Asp.NET WebApi 项目,项目名:Com.App.SysApi(本例创建的是 .net 4.5 框架程序) 2 打开Nuget 包管理软件,查找 swagger 安装Swashbuckle 组件 3 开启项目的XML注释位置(选中项目Com.Ap
using ImpromptuInterface; using System; using System.Dynamic; namespace ConsoleApp2 { class Program { static void Main(string[] args) { dynamic expand
https://blog.csdn.net/michaelgong/article/details/43148597
C#11添加了文件作用域类型功能:一个新的file修饰符,可以应用于任何类型定义以限制其只能在当前文件中使用。 这样,我们可以在一个项目中拥有多个同名的类。 通过下面的项目显示,该项目包含两个名为Answer的类。 文件File1.cs中 namespace ConsoleApp11 { file