c#使用RSA公钥解密

news2025/2/21 20:12:57

文章目录

  • 前言
  • 一、解密函数
      • 1、上代码!
      • 2、传入的字符串不是base64格式
  • 二、在线验证
  • 总结


前言

新项目对接第三方,会把用户信息反正url里面rsa加密传过来,拿到后我解密出用户数据,只给了一个公钥,他们用的java、我用的c#,记录一下解密过程


一、解密函数

1、上代码!

废话不多说,直接上代码:
传入公钥,加密字符串即可

引入包:
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Crypto.Engines;


    public static string DecryptPublicKeyJava(string publicKeyJava, string data, string encoding = "UTF-8")
    {
        RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKeyJava));

        //判断data是否是4的倍数,不是的话后面加=号,再接着判断,直到是4的倍数
        data = IsMultipleOfFour(data);

        byte[] cipherbytes = Convert.FromBase64String(data);
        RsaEngine rsa = new RsaEngine();
        rsa.Init(false, publicKeyParam);//参数true表示加密/false表示解密。
        cipherbytes = rsa.ProcessBlock(cipherbytes, 0, cipherbytes.Length);

        string decryptStr= Encoding.GetEncoding(encoding).GetString(cipherbytes).ToString();
        decryptStr = Regex.Replace(decryptStr, @"[^\u0000-\u007F]", string.Empty);
        decryptStr = decryptStr.Replace("\x01", "");

        Log.WriteToFile("DecryptPublicKeyJava", "decryptStr:"+ decryptStr );
        return decryptStr;
    }

    public static string IsMultipleOfFour(string str)
    {
        int _cnt = 0;
        while (str.Length % 4 != 0)
        {
            _cnt++;
            if (_cnt>10)
            {
                return str;
            }
            str+="=";
        }
        return str.ToString();
    }

2、传入的字符串不是base64格式

用起来有点小问题,有时解密报错:字符串不是base64格式

朕,百思不得其解
询问了强大的chatgpt之后才恍然大悟,原来需要字符串是4的倍数才行,不是的话可以用=号补充,上面代码已经加上这个函数了
在这里插入图片描述

二、在线验证

找了好几个在线rsa加解密站,感觉还是这个最好用:
https://www.bchrt.com/tools/rsa/

示例:
在这里插入图片描述

其他:吐槽一下,这个第三方怎么做到加密后字符串不是4的倍数的哇


总结

参考:chatgpt、new bing

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/619569.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot生成RESTful API文档

由于我一开始学习的SpringBoot是3以上版本,所以我这里用到的也是支持和SpringBoot3能够整合的SpringDoc 这里先说一下,其实SpringDoc就是Swagger3版本,我一开始整合的2版本,比较麻烦况且最后SpringBoot程序都启动不了了&#xff0…

怎样书写专业的落地性能测试计划?

目录 引言 什么是性能测试计划 性能测试计划包含的内容 背景 性能目标 压测范围 启停准则 性能指标 系统架构图 压测前准备 工具准备 数据准备 性能设计 监控设计 项目组织架构 成果输出 项目风险分析 引言 测试计划是软件测试流程中的一个重要步骤,它涉及到对软件…

面向教育行业的MDM(移动设备管理)解决方案

什么是面向教育的MDM 学校和教育机构的移动设备管理 (MDM) 通过将智能设备配置为适合教育用途,支持通过这些设备进行学习。面向教育的 MDM 解决方案允许组织的 IT 管理员或教学人员管理有助于学习的设备,如智能手机、平板电脑、笔…

十三、输出多个立方体并深度测试

第一部分概念 1)由来: 深度测试:opengl的深度测试是指在片段着色器执行之后,利用深度缓冲所保存的深度值决定当前片段是否被丢弃的过程。 深度缓冲区和颜色缓冲区是差不多的,有相同的宽高度,并且一般在窗…

实验篇(7.2) 06. 通过安全隧道访问远端内网服务器 (FortiClient-SSL) ❀ 远程访问

【简介】直接映射服务器到公网,没有验证不安全;通过Web浏览器访问远程内网服务器,有验证也安全,但是支持的协议太少。那有没有即安全,又能支持所有协议的访问方法呢?我们来看看SSL VPN的隧道模式。 实验要求…

智能动环监控系统,实时排查机房安全隐患

动环监控系统又称机房动环、机房动力环境监控系统、动环监控等, 是指对各机房的动力、环境、安防进行集中监测。可对监控系统、设备、安全运行状态进行实时监测、通过统计和处理相关数据,及早发现故障,及时通知运维人员处理;实现机…

员工工作服穿戴AI识别算法 yolov5

员工工作服穿戴AI识别算法是基于yolov5python网络模型人工智能技术,员工工作服穿戴AI识别算法对现场人员的工作服穿戴情况进行实时监控,并对违规情况将自动发出警报。我们选择当下YOLO卷积神经网络YOLOv5来进行火焰识别检测。现版本的YOLOv5每个图像的推…

高并发下缓存失效问题(穿透、雪崩、击穿),以及本地锁、Redis分布锁、Redisson锁、SpringCache使用

高并发下缓存失效问题-穿透、雪崩、击穿 1.缓存穿透2.缓存雪崩3.缓存穿透4.加锁4.1 本地锁4.2 Redis分布锁4.3 RedLock 分布式锁-Redisson**4.3.1 整合Redisson实现分布式锁**4.3.2 分布式锁 1)分布式锁 - - 可重入锁 2)分布式锁 - - 公平锁 3&#xff0…

Spring面试题(基础篇)

目录 一、Spring框架概述 1、什么是Spring? 2、spring优点有哪些? 二、IOC与DI 3、你知道getBean方法的有几种重载方式吗? 4、Spring有几种依赖注入方式? 三、Spring创建对象 5、Spring创建对象有几种方式? 6…

SciencePub学术 | 可再生能源类重点SCIEI征稿中

SciencePub学术刊源推荐: 可再生能源类重点SCI&EI征稿中!2区闭源正刊,进展顺利,稳定检索40年以上。信息如下,录满为止: 一、期刊概况: 可再生能源类重点SCI&EI 【期刊简介】IF:4.0-4.…

Win安装kafka

Win安装kafka 安装zookeeper修改zookeeper 配置文件 安装kafka启动kafka创建topic查看topic命令 用命令发布消息消费命令 安装zookeeper https://zookeeper.apache.org/releases.html 解压到文件夹 同时在解压目录中拆创建 data和 log文件夹 修改zookeeper 配置文件 - 复制 …

小程序多选框问题

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 例如&#xff1a;前端小程序记录错误bug 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 例如&#xff1a;前端循环数组时页面数据无法显示 <checkbox-group bindchange"…

【greenplum 性能优化】greenplum 数据库集群 如何释放占用内存

无意中发现了一个巨牛的人工智能教程&#xff0c;忍不住分享一下给大家。教程不仅是零基础&#xff0c;通俗易懂&#xff0c;而且非常风趣幽默&#xff0c;像看小说一样&#xff01;觉得太牛了&#xff0c;所以分享给大家。点这里可以跳转到教程。人工智能教程 在Greenplum数据…

想从事UE4开发相关工作,C++学到什么程度可以开始学习针对虚幻4的编程开发呢?

想从事UE4开发相关工作&#xff0c;C学到什么程度可以开始学习针对虚幻4的编程开发呢&#xff1f; 想从事UE4开发相关工作&#xff0c;C是一个必须要熟练掌握的语言。在学习C过程中&#xff0c;需要掌握语法、面向对象编程、数据结构和算法等内容&#xff0c;这些都是开发UE4所…

nginx修改配置文件不生效

1、问题描述 由于需要向其他公司的数据库中推送数据&#xff0c;但是对方公司的服务器只针对某一台服务器开放了端口&#xff0c;公司的datax部署在另外一台服务器中&#xff0c;导致不能正常连接数据库。因此做了nginx&#xff0c;进行两次代理&#xff0c;但是对方服务器突然…

企业——配置两条静态路由

要求1&#xff1a;按照图中要求配置IP地址&#xff0c;使用静态路由实现要求1、2 要求2&#xff1a;pc1访问pc2走下面 要求3&#xff1a;pc2访问pc1走上面&#xff0c;且两条线路互为备份 1.配置接口IP int g0/0/~ ip address ~ 2.配置静态路由&#xff0c;每个路由两条&a…

Vue3优雅地监听localStorage变化

目录 &#x1f4a1;前言 &#x1f4a1; 为什么要这样做&#xff1f; &#x1f48e; 思路 &#x1f48e; 实现 &#x1f697; 实现中介者模式 &#x1f697; 重写localStorage &#x1f697; 实现useStorage hook &#x1f48e; 测试 &#x1f697; 使用localStorage …

「大模型微调」使用 DDP 实现程序单机多卡并行指南

最近在大趋势的影响下&#xff0c;开始染指大模型。由于实验室计算资源的限制&#xff0c;需要使用单机多卡并行的方式运行程序&#xff0c;这里以 BLOOM-560m 模型为例&#xff0c;演示如何通过单机多卡DDP并行的方式微调完成下游任务。 目录 0. 基础篇- 两种分布式训练方式- …

网络安全自学笔记

一、怎么入门&#xff1f; 这个 Web 安全学习路线&#xff0c;整体大概半年左右&#xff0c;具体视每个人的情况而定。 &#xff08;上传一直很模糊&#xff0c;所以就没有展开了&#xff0c;需要高清版的可以在下面领取&#xff09; &#x1f449; 【一学习路线高清版一】&a…

Java操作mongodb(含分页,精确查询,模糊查询,时间区间,排序)进行查询

mongodb是常用的非关系型数据库&#xff0c;他经常用来存储文本数据&#xff0c;也就是JSON格式的数据。 不废话&#xff0c;直接上代码。注释写的很详细。&#xff08;有问题留言秒回&#xff09; public Page<Product> listProducts(ProductCond cond) {//如前端没传&a…