首页 > 编程语言 >c#/JS RSA 非对称加密

c#/JS RSA 非对称加密

时间:2022-11-21 09:55:26浏览次数:68  
标签:Convert string c# RSA JS ToBase64String ----- privateKeyParam ToByteArrayUnsigne

可以用到 前端加密,后端解密,或者后端加解密

首先要知道这这个rsa是需要一个公钥一个私钥进行加解密的,公钥加密,私钥解密。可以去百度在线生成。

脚本或者页面中先引用jsencrypt.js

document.write("<script src= '../jsencrypt.js'></script>");
var publicKey="公钥";
//这个sign就是加密后的字符串
var sign = encryptRequest("123456", publicKey);

用jsencrypt类库加密js方法

function encryptRequest(str, publicKey) {
    var encrypt = new JSEncrypt();
    encrypt.setPublicKey(publicKey);
    // ajax请求发送的数据对象
    // 将data数组赋给ajax对象
    return encrypt.encrypt(str);

}

 

下面是c# 后端的加解密

public class RSAHelper
    {

        /// <summary>
        /// RSA加密
        /// </summary>
        /// <param name="publickey">公钥</param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string RSAEncrypt(string publickey, string content)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            byte[] cipherbytes;
            rsa.FromXmlString(publickey);
            cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);

            return Convert.ToBase64String(cipherbytes);
        }

        /// <summary>
        /// RSA解密
        /// </summary>
        /// <param name="privatekey">私钥</param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string RSADecrypt(string privatekey, string content)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            byte[] cipherbytes;
            rsa.FromXmlString(privatekey);
            cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false);

            return Encoding.UTF8.GetString(cipherbytes);
        }


        /// <summary>  
        /// PEM格式私钥转换成XML格式私钥
        /// </summary>  
        /// <param name="privateKey">PEM格式私钥,(纯文字字符,注意不带-----BEGIN PRIVATE KEY-----和-----END PRIVATE KEY-----)</param>  
        /// <returns></returns>  
        public static string RSAPrivateKeyToXml(string privateKey)
        {
            RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey));

            return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>",
                Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned()));
        }

        /// <summary>    
        /// PEM格式公钥转换成XML格式公钥
        /// </summary>    
        /// <param name="publicKey">PEM格式公钥,(纯文字字符,注意不带-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----)</param>
        /// <returns>转换后的XML格式公钥</returns>    
        public static string RSAPublicKeyXML(string publicKey)
        {
            RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey));

            return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>",
                    Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()),
                    Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned()));
        }

    }

使用实例:

 var privateKey ="私钥"
 var RSAKey = RSAHelper.RSAPrivateKeyToXml(privateKey);//把私钥转换成xml格式
 var RSADecrypt = RSAHelper.RSADecrypt(RSAKey, Sign);//解密

 

标签:Convert,string,c#,RSA,JS,ToBase64String,-----,privateKeyParam,ToByteArrayUnsigne
From: https://www.cnblogs.com/wangxlei/p/16910411.html

相关文章

  • 我眼中的ASP.NET Core之微服务(二)
    前言接上一篇。上一篇未完待续的原因是当时刚好是6-30号晚上马上12点了还没写完,然后我想赶在7月1号之前发出去,所以当时就发了。然后在发的时候出了一点问题,结果发出去的......
  • HCIA学习笔记四十一:ACL访问控制列表
    一、ACL应用场景• ACL可以通过定义规则来允许或拒绝流量的通过。二、ACL分类三、ACL规则• 每个ACL可以包含多个规则,RTA根据规则来对数据流量进行过滤。四、基......
  • Prometheus和Grafana监控Nacos
    Nacos0.8.0版本完善了监控系统,支持通过暴露metrics数据接入第三方监控系统监控Nacos运行状态,目前支持prometheus、elasticsearch和influxdb,下面结合prometheus和grafana......
  • ABC278D 题解
    前言题目传送门!更好的阅读体验?难度加强版:P1253。思路很容易想到线段树。维护\(cov_i\)表示覆盖的懒标记。单点加与单点查都非常简单。全局覆盖只需要给每一层都打......
  • linux释放buff/cache缓存内存
    echo3>/proc/sys/vm/drop_caches------释放buff/cache缓存内存echo0是不释放缓存echo1是释放页缓存ehco2是释放dentries和inodes缓存echo3是释放1和2中说......
  • C++ using 编译指令与名称冲突
    using编译指令:它由名称空间名和它前面的关键字usingnamespace组成,它使名称空间中的所有名称都可用,而不需要使用作用域解析运算符。在全局声明区域中使用using编译指......
  • .NET Core工作流
    命令#.NETCorev2#Build,test,package,orpublishadotnetapplication,orrunacustomdotnetcommand.-task:DotNetCoreCLI@2inputs:command:'bu......
  • 速码工具箱,Excel批量生成二维码
    二维码生产力工具,速码工具箱1.0发布已经有2年时间,在这两年时间里,插件收到了大家的一致好评。中间也有很多用户定制插件,并且给插件提出了宝贵的意见,插件在诸多用户案例的基......
  • 面试官:谈谈 Spring Cloud 与 Dubbo 有什么区别?
    作者:IsToRestartblog.csdn.net/weixin_51291483/article/details/1092121371、SpringCloud与Dubbo的区别两者都是现在主流的微服务框架,但却存在不少差异:初始定位不同......
  • python except 自动无交互登录
    python+expect实现脚本自动登录远程服务器起因最近在折腾Ubuntu系统,有时候需要连接远程服务器,使用ssh命令连接较为复杂,需要记住每台机器的ip和密码,当然Ubuntu(lin......