首页 > 编程语言 >.Net(C#) RSA分段加密和解密

.Net(C#) RSA分段加密和解密

时间:2023-03-30 16:22:38浏览次数:39  
标签:C# bytes RSA rsa start int RSACryptoServiceProvider var Net

//密钥为pem格式
public class EncryptUtils
    {
        private const int _maxEncryptSize = 117;
        private const int _maxDecryptSize = 256;

        public static string RSAEncrypt(string publicKey, string bizContent)
        {
            //此处请根据需要设置集合capacity,也可不指定
            var encryptedData = new List<byte>(45000);
            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
            {
                rsa.ImportFromPem(publicKey);

                int start = 0;
                var bytes = Encoding.UTF8.GetBytes(bizContent).AsSpan();
                while (start < bytes.Length)
                {
                    var buffer = bytes.Length - start <= _maxEncryptSize
                        ? bytes.Slice(start).ToArray() : bytes.Slice(start, _maxEncryptSize).ToArray();

                    encryptedData.AddRange(rsa.Encrypt(buffer, false));
                    start += _maxEncryptSize;
                };
            }

            return Convert.ToBase64String(encryptedData.ToArray());
        }

        public static string RSADecrypt(string privateKey, string bizContent)
        {
            //此处请根据需要设置集合capacity,也可不指定
            var encryptedData = new List<byte>(45000);
            using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
            {
                rsa.ImportFromPem(privateKey);

                int start = 0;
                var bytes = Convert.FromBase64String(bizContent).AsSpan();
                while (start < bytes.Length)
                {
                    var buffer = bytes.Length - start <= _maxDecryptSize
                        ? bytes.Slice(start).ToArray() : bytes.Slice(start, _maxDecryptSize).ToArray();

                    encryptedData.AddRange(rsa.Decrypt(buffer, false));

                    start += _maxDecryptSize;
                };
            }
            return Encoding.UTF8.GetString(encryptedData.ToArray());
        }
    }

 

标签:C#,bytes,RSA,rsa,start,int,RSACryptoServiceProvider,var,Net
From: https://www.cnblogs.com/anech/p/17273260.html

相关文章

  • 手写 call、applay
     callFunction.prototype.mycall=function(context,...args){if(this===Function.prototype){returnundefined;}context=context||window;......
  • csharp大文件上传解决方案支持分片断点上传
    ​ 4GB以上超大文件上传和断点续传服务器的实现随着视频网站和大数据应用的普及,特别是高清视频和4K视频应用的到来,超大文件上传已经成为了日常的基础应用需求。但是在......
  • Django admin中TabularInline和StackedInline使用
    TabularInline类用于在A页面上编辑B表的字段,举例说明,如果models.py中有Staff、Job两个model:fromdjango.dbimportmodelsclassStaff(models.Model):name=model......
  • 1.celery的基本使用
    一、什么是Celery1.1、celery是什么Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列,同时也支持任务调度。   Celery的架构......
  • [Python]async异步爬虫
    importasyncioimportaiohttpasyncdefdownload_img(session,url):file_name=url.rsplit('/')[-1]print(f"下载图片:{file_name}")awaitasyncio.......
  • 利用 rpc 获取 boss __zp_stoken__
    1什么是RPCRPC,英文RangPaCong,中文让爬虫,旨在为爬虫开路,秒杀一切,让爬虫畅通无阻!开个玩笑,实际上RPC为远程过程调用,全称RemoteProcedureCall,是一种技术思想而非一种......
  • 玩转RuoYi-Cloud-Plus--7.docker部署nacos(单机)
    7.docker部署nacos(单机)仅部署nacos-server,不使用prometheus/grafana等监控组件 1.拉取镜像dockerpullnacos/nacos-serverdockerpullna......
  • DTCloud异常与解决方法一览
    Dtcloud的异常抛出往往令人摸不着头脑,本文记录了一些本人在使用过程中遇到的一些异常以及解决的方式,配上异常截图方便日后可以”按图索骥”。目前所记录的问题可能还比较片......
  • mipi--I2C调试
    1.DTS配置参考---->https://wiki.t-firefly.com/Core-3568J/module_camera.html2.调试参考文档---->Rockchip_Developer_Guide_Linux4.4_Camera_CN修改kconfg和Makefile-......
  • asp.net webapi2.0文件上传
    [Route("api/uploadFile")]publicReturnMessagePostFile(stringsaveDirName){HttpRequesthttpRequest=HttpContext.Current......