• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Java和C#RSA加解密相互通信和使用公钥加密传输

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

关于JAVA和C#加解密通讯的话,可以用这个BouncyCastle插件,会帮助你解决很多问题

http://www.bouncycastle.org/

//c#使用java给的公钥进行rsa加密
public static byte[] RSAEncrypt(string publickey, string content)
    {
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        byte[] publicKeyBytes = Convert.FromBase64String(publickey);
        AsymmetricKeyParameter asymmetricKeyParameter = PublicKeyFactory.CreateKey(publicKeyBytes);
        RsaKeyParameters rsaKeyParameters = (RsaKeyParameters)asymmetricKeyParameter;
        RSAParameters rsaParameters = new RSAParameters();
        rsaParameters.Modulus = rsaKeyParameters.Modulus.ToByteArrayUnsigned();
        rsaParameters.Exponent = rsaKeyParameters.Exponent.ToByteArrayUnsigned();
        rsa.ImportParameters(rsaParameters);
        return rsa.Encrypt(Encoding.GetEncoding("gbk").GetBytes(content), false);
    }

使用方法:

string tempStr=Convert.ToBase64String(RSACoder.RSAEncrypt("公钥", "需要加密码的字符"))

另一种写法:一般都是参数使用utf-8编码:

  public string RSAEncrypt2(string publickey, string content)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            byte[] publicKeyBytes = Convert.FromBase64String(publickey);
            AsymmetricKeyParameter privateKey = PublicKeyFactory.CreateKey(publicKeyBytes);
            IBufferedCipher c = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding");
            //加密 
            c.Init(true, privateKey);
            byte[] byteData = Encoding.UTF8.GetBytes(content);
            byteData = c.DoFinal(byteData, 0, byteData.Length);
           return Convert.ToBase64String(byteData);
        }

 c#通过rsa公钥解密java那边加密字符:

      public static string RSADeEncry222(string content, string publickey)
        {
            byte[] btPem = Convert.FromBase64String(publickey);
            int pemModulus = 128, pemPublicExponent = 3;
            byte[] btPemModulus = new byte[128];
            byte[] btPemPublicExponent = new byte[3];
            for (int i = 0; i < pemModulus; i++)
            {
                btPemModulus[i] = btPem[29 + i];
            }
            for (int i = 0; i < pemPublicExponent; i++)
            {
                btPemPublicExponent[i] = btPem[159 + i];
            }
            BigInteger biModulus = new BigInteger(1, btPemModulus);
            BigInteger biExponent = new BigInteger(1, btPemPublicExponent);
            RsaKeyParameters publicParameters = new RsaKeyParameters(false, biModulus, biExponent);
            IAsymmetricBlockCipher eng = new Pkcs1Encoding(new RsaEngine());
            eng.Init(false, publicParameters);
            // 解密已加密的数据
            byte[] encryptedData = Convert.FromBase64String(content);
            encryptedData = eng.ProcessBlock(encryptedData, 0, encryptedData.Length);
            string result = Encoding.UTF8.GetString(encryptedData, 0, encryptedData.Length);
            return result;
        }

 

普通C#自身调用加解密:

RSACryptoServiceProvider oRSA = new RSACryptoServiceProvider();
            string privatekey = oRSA.ToXmlString(true);//私钥 
            string publickey = oRSA.ToXmlString(false);//公钥 
            //这两个密钥需要保存下来 
            byte[] messagebytes = Encoding.UTF8.GetBytes("luo罗"); //需要加密的数据 

            //公钥加密 
            RSACryptoServiceProvider oRSA1 = new RSACryptoServiceProvider();
            oRSA1.FromXmlString(publickey); //加密要用到公钥所以导入公钥 
            byte[] AOutput = oRSA1.Encrypt(messagebytes, false); //AOutput 加密以后的数据 
            //如果要url传输时,比如前后端分离传输json,转为base64
//string EnStr=Convert.ToBase64String(AOutput);
//url传输时,要把+号转为%2B
//enStr = enStr.Replace("+", "%2B");  //在url传输过程中,会把+号变为空串
//私钥解密 RSACryptoServiceProvider oRSA2 = new RSACryptoServiceProvider(); oRSA2.FromXmlString(privatekey);
byte[] AInput = oRSA2.Decrypt(AOutput, false); string reslut = Encoding.UTF8.GetString(AInput);

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c#ComboBox绑定枚举发布时间:2022-07-13
下一篇:
C#基础|初探反射发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap