使用 X509certificate2 进行 RSA 加密和解密

2024-03-20

所以,我接下来需要的是:

  1. 创建用于开发的证书,为客户端获取一份证书,为服务器获取一份证书
  2. 通过API检索客户端编码的密码并在服务器上解码

现在,我成功创建了以下证书这个链接 https://blog.jayway.com/2014/09/03/creating-self-signed-certificates-with-makecert-exe-for-development/。那里的女孩一步一步地说明了如何获取自签名证书、将它们存放起来等等......现在,我遇到问题的部分是:

我已成功使用以下代码加密我的数据:

public static string Encrypt(string stringForEncription, string PathToPrivateKey)
    {
        X509Certificate2 myCertificate;
        try
        {
            myCertificate = new X509Certificate2(PathToPrivateKey, "Test123");
        }
        catch (Exception e)
        {
            throw new CryptographicException("Unable to open key file.");
        }

        RSACryptoServiceProvider rsaObj;
        if (myCertificate.HasPrivateKey)
        {
            rsaObj = (RSACryptoServiceProvider)myCertificate.PrivateKey;
        }
        else
            throw new CryptographicException("Private key not contained within certificate.");

        if (rsaObj == null)
            return String.Empty;

        byte[] decryptedBytes;
        byte[] array = Encoding.UTF8.GetBytes(stringForEncription);
        try
        {
            decryptedBytes = rsaObj.Encrypt(array, false);
            //decryptedBytes = rsaObj.Encrypt(Convert.FromBase64String(Base64EncryptedData), false);
        }
        catch (Exception e)
        {
            throw new CryptographicException("Unable to encrypt data.");
        }

        //    Check to make sure we decrpyted the string 
        if (decryptedBytes.Length == 0)
            return String.Empty;
        else
            return System.Text.Encoding.UTF8.GetString(decryptedBytes);
    }

对于 PathToPrivate 键变量,我使用客户端 ClientCert.pfx 的路径。我不知道是否应该使用其他任何证书,但这是包含我制作的所有证书的文件夹的快照:

现在,为了解密,我使用下一个代码:

 public static string DecryptEncryptedData(string Base64EncryptedData, string PathToPrivateKey)
    {
        X509Certificate2 myCertificate;
        try
        {
            myCertificate = new X509Certificate2(PathToPrivateKey, "Test123");
        }
        catch (Exception e)
        {
            throw new CryptographicException("Unable to open key file.");
        }

        RSACryptoServiceProvider rsaObj;
        if (myCertificate.HasPrivateKey)
        {
            rsaObj = (RSACryptoServiceProvider)myCertificate.PrivateKey;
        }
        else
            throw new CryptographicException("Private key not contained within certificate.");

        if (rsaObj == null)
            return String.Empty;

        byte[] decryptedBytes;
        try
        {
            decryptedBytes = rsaObj.Decrypt(Convert.FromBase64String(Base64EncryptedData), false);
        }
        catch (Exception e)
        {
            throw new CryptographicException("Unable to decrypt data.");
        }

        //    Check to make sure we decrpyted the string 
        if (decryptedBytes.Length == 0)
            return String.Empty;
        else
            return System.Text.Encoding.UTF8.GetString(decryptedBytes);
    }

无论我尝试做什么,它都会给我例外:

{"The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters. "}

真的很感激有人帮助我。


您收到错误的原因是您尝试使用的字符串Convert.FromBase64String来自实际上不是 Base-64 字符串的值。

加密数据后,您应该将字节数组转换为 base-64 字符串。 使用转换为Base64String https://msdn.microsoft.com/en-us/library/dhx0d524(v=vs.110).aspx为了这。

return Convert.ToBase64String(decryptedBytes);

然后你的解密行将起作用:

解密字节数 = rsaObj.Decrypt(Convert.FromBase64String(Base64EncryptedData), false);

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

使用 X509certificate2 进行 RSA 加密和解密 的相关文章

  • 套接字编程-listen() 和accept() 有什么区别?

    我一直在读本教程 http www cs rpi edu moorthy Courses os98 Pgms socket html了解套接字编程 看来listen and accept 系统调用都做同样的事情 即阻塞并等待客户端连接到使用
  • 在 React 应用程序中使用 API 密钥

    我有一个使用两个第三方服务的 React 应用程序 该应用程序已开始使用react create app 这两项服务都需要 API 密钥 通过脚本标签提供一个密钥 如下所示 另一个 API 密钥在请求中使用 我将实际密钥存储在常量中并使用它
  • C++0x 初始值设定项列表示例

    我想看看这个现有代码示例如何利用 C 0x 初始化列表功能 示例0 include
  • JetBrains Rider 针对 4.5 框架,无法切换到 4.7

    基本上 当尝试添加不支持旧框架的 NuGet 包时 会出现错误 但是在项目配置中只有 4 5 可用 在项目创建过程中 不存在选择目标的选项 有什么方法可以正确配置它吗 I haven t found out how to set up NE
  • std::bind2nd 和 std::bind 与二维数组和结构数组

    我知道 C 有 lambda 并且 std bind1st std bind2nd 和 std bind 已弃用 然而 从C 的基础开始 我们可以更好地理解新特性 所以 我从这个非常简单的代码开始 使用int 数组s 第一个例子 与std
  • 如何部署包含第三方 DLL 文件的 C# 应用程序?

    首先 我对部署了解不多 我希望我的问题有意义 我需要将 C 应用程序安装 部署到多个桌面 它需要一个第三方 DLL 文件 一个 C 库 lpsolve55 dll 对于那些感兴趣的人 它是一个免费的 MIP LP 求解器 请参阅 lpsol
  • 尽管浮点数相同,但它们并不相等? [复制]

    这个问题在这里已经有答案了 下面的程序输出This No is not same 当两个数字相同时为什么会这样做 void main float f 2 7 if f 2 7 printf This No is same else prin
  • 如何在 JASPIC 中保存经过身份验证的用户?

    我开发了一个安全认证模块 SAM 并实现了validateRequest方法 我还有一个简单的 Web 应用程序配置为使用此 SAM In my validateRequest方法 我检查 clientSubject 并设置一个Caller
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • C# 实体框架我们应该使用 POCO.Id 还是仅使用 POCO 设置关系?

    我在服务方法中遇到一种情况 将 POCO 分配为另一个 POCO 的子对象无法按预期工作 我正在使用实体框架 4 public void ChangeOrderCurrency Currency currency order Currenc
  • 根据 Active Directory 策略检查密码[重复]

    这个问题在这里已经有答案了 我有一个允许用户更改其 AD 密码的前端 有没有办法获取特定用户及其属性 长度 复杂性 的密码策略 例如细粒度 有没有办法根据此特定策略检查字符串 xyz121 编辑 我不想检查活动目录中存储的当前密码 我想检查
  • Web 文本编辑器中的 RTF 格式

    网络上是否有支持 RTF 格式文档输入的文本编辑器 我知道这对 webdev 来说有点奇怪 但我需要从数据库中读取 RTF 文档 并在基于 Web 的文本编辑器中对其进行编辑 然后将其存储回 RTF 中 在我在转换工具上投入太多资金之前 我
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • 何时分离或加入 boost 线程?

    我有一个方法 大约每 30 秒触发一次 我需要在一个线程中包含它 我有一个可以从类外调用的方法 像 call Threaded Method 这样的东西会创建一个线程 该线程本身会调用最终的线程方法 这些是 MyClass 的方法 void
  • 如果项目包含多个文件夹,如何使用 Add-Migration

    我想Add Migration使用我的 DbContext 但出现错误 The term add migration is not recognized as the name of a cmdlet function script fil
  • 在 C# 窗口应用程序中运行 C/C++ 控制台应用程序?

    现在 我想开发一个简单的应用程序 因此我决定最快的编码方式是 C NET 但现在 我很难实现我需要的功能之一 我想做的是在 C 应用程序的窗口内运行 C C 控制台应用程序 就像在虚幻前端中一样 添加一点通信方式 以便我可以为控制台应用程序
  • 检查另一种形式的线程是否仍在运行

    我有一个涉及两个窗体的 Windows 窗体应用程序 子表单用于将数据导出到 CSV 文件 并使用后台工作者写入文件 当这种情况发生时 我隐藏了表格 当后台工作程序运行时 父窗体仍然处于活动状态 因此即使后台工作程序正在写入文件 用户也可以
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize
  • 是否可以检测流是否已被客户端关闭?

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

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

随机推荐

  • 解析问题(Xcode):找不到模块“fluttertoast”(在项目“Pods”的目标“Toast”中)

    Parse Issue Xcode Module fluttertoast not found Users anand StudioProjects untitled ios Runner GeneratedPluginRegistrant
  • 如何确定堆栈中保存的值?

    我正在做一些实验 希望能够看到系统调用期间堆栈上保存的内容 用户登陆进程的保存状态 根据http lxr linux no linux v2 6 30 1 arch x86 kernel entry 32 S http lxr linux
  • 使用 PowerShell 删除已知的 Excel 密码

    我有这个 PowerShell 代码 可以循环指定目录中的 Excel 文件 参考已知密码列表来查找正确的密码 然后打开 解密该文件并将其保存到新目录 但它的执行速度没有我想要的那么快 它是更大的 ETL 流程的一部分 并且是一个瓶颈 此时
  • 网络中的非标准字体?

    我最近遇到使用字体 ff tisa web pro 1 的网页 http cykod com blog 在他们的 CSS 文件中指定 这是如何运作的 我的电脑上肯定没有这个字体 但是却显示了 正如 Simon 指出的 CSS font fa
  • 按属性对对象数组进行排序

    我从数据库中有这个集合 var items Name Michael TypeId 1 Name Max TypeId 1 Name Andre TypeId 1 Name Georg TypeId 2 Name Greg TypeId 3
  • 添加具有实现的特征方法是否会破坏向后兼容性?

    添加方法时我对向后兼容性感到困惑使用默认实现到一个特质 喜欢 以前的版本 trait Foo 新版本 trait Foo def verifyConsistency Option String provide default impleme
  • 我们如何根据 React Native 中的列表项内容为 FlatList 提供自动高度

    我在我的组件中使用 FlatList 它工作正常 所需要的是我的整个屏幕应该有一个自动高度 并且 FlatList 内容永远不会超出屏幕高度 此外 FlatList 的高度应根据其中的内容 项目进行更改 而不是给出任何固定高度 如何实现自动
  • 如何将人声转换为数字格式?

    我正在开展一个使用生物识别系统来保护系统的项目 我们计划使用人声来保护系统 想法是让人们说出一些单词或句子 系统将以数字格式存储该语音 下次人们想要进入系统时 他 她必须说出一些单词 这些单词可能与之前使用的单词不同 也可能没有不同 我们不
  • 属性模式的优点和缺点是什么?

    史蒂夫 叶格描述了属性模式 in a 博客文章 http steve yegge blogspot com 2008 10 universal design pattern html Property of his 对于使用 C 或 Jav
  • 如何监控 iOS 模拟器的网络调用

    我正在尝试像 Firebug 一样监视从应用程序到我的服务器的调用 我找不到在 iOS Simulator 或 xCode 中查看该内容的方法 有没有办法在不嗅探所有流量的情况下做到这一点 如果没有 您建议使用什么工具 就我个人而言 我使用
  • 射线交叉未击中目标

    我正在尝试选择一个 3d 点 我阅读了各种网站 但我的代码不起作用 鼠标右键单击 glGetFloatv GL MODELVIEW MATRIX mv mat glGetFloatv GL PROJECTION MATRIX p mat i
  • C# Assert.AreNotEqual 与 Equals

    在尝试向自己验证 C Equals for IEnumerables 是一个引用 equals 时 我发现了一些奇怪的东西 在 NUnit 中进行以下设置 var a IEnumerable
  • QNetworkAccessManager没有完成信号

    我想直接请求和响应而不是使用connect SLOT finished SLOT 您可以使用QEventLoop以便应用程序等待并可以同时处理其他事件 include
  • 在 Cocoa 中获得机器唤醒+用户登录通知的可靠方法?

    我尝试过注册NSWorkspaceDidWakeNotification with NSNotificationCenter defaultCenter 但当我的 MacBook Pro 从睡眠状态唤醒时 它永远不会触发 我注册了其他通知
  • Kotlin:如何绕过 CancellationException

    我正在将一些旧的 RxJava 代码移植到协程中 使用 RxJava 我可以在我的活动中执行此操作 someBgOperation as AutoDispose autoDisposable AndroidLifecycleScopePro
  • PHP – setcookie() 不起作用

    我有这个页面 它设置一个 cookie 并在您选中复选框时回显一个字符串 字符串打印正确 但 cookie 从未被设置 我不知道为什么
  • 如何启用Windows 10“容器”功能?

    使用最新的 Windows 10 Fast Ring build 14316 在 VMware 虚拟机内 我试图使桌面应用程序转换器 https msdn microsoft com windows uwp porting desktop
  • 编码/gob 和编码/json 之间的区别

    我正在用 Go 编写一个应用程序 它使用编码 gob 在节点之间通过 UDP 发送结构和切片 它工作正常 但我注意到encoding json也有类似的API 搜索了一下 发现了这个信息 https golang org pkg encod
  • 使用 Spring Security (Spring Boot 3.0.2) 时如何访问 H2 控制台?

    所以我正在尝试学习 Spring 因为今年晚些时候我的一个项目将需要它 项目使用 Spring Boot 3 0 2 和 Java 17 我还使用 Spring Security 依赖项 这意味着我需要在不使用令牌的情况下授权某些 URL
  • 使用 X509certificate2 进行 RSA 加密和解密

    所以 我接下来需要的是 创建用于开发的证书 为客户端获取一份证书 为服务器获取一份证书 通过API检索客户端编码的密码并在服务器上解码 现在 我成功创建了以下证书这个链接 https blog jayway com 2014 09 03 c