RSA非对称加密 net->java

由于net/java 底层字节处理有差异会导致RSA非对称加解密通信联调不通的问题,记录一下,直接上代码
 var pwd = new AsymmCrypt().EncryptByPublicKey(symm.Decrypt(edsPwd), rsaPublicKey);  //rsa net->java
                pwd = System.Net.WebUtility.UrlEncode(pwd);  //服务端接收数据异常
                var url = $"{tokenUrl.Trim('\\').Trim('/')}?userName={loginInfo.FItemNumber}&password={pwd}&t={DateTime.Now.Ticks}";
                string tokenId = "";
                using (var httpClient = new HttpClient(new HttpClientHandler() { AutomaticDecompression = System.Net.DecompressionMethods.GZip | System.Net.DecompressionMethods.Deflate }))
                {
                    httpClient.DefaultRequestHeaders.Clear();
                    HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Get, new Uri(url));
                    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
                    ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
                    var response = httpClient.SendAsync(httpRequest, HttpCompletionOption.ResponseContentRead).Result;

                    if (response.IsSuccessStatusCode)


/// <summary>/// 公钥加密/// </summary>/// <param name="data">加密内容</param>
         /// <param name="publicKey">公钥(Base64编码后的)</param>
         /// /// <returns>返回Base64内容</returns>
        public string EncryptByPublicKey(string data, string publicKey)
        {//非对称加密算法,加解密用
            IAsymmetricBlockCipher engine = new Pkcs1Encoding(new RsaEngine());//加密
            try
            {
                engine.Init(true, GetPublicKeyParameter(publicKey)); byte[] byteData = Encoding_UTF8.GetBytes(data);
                var ResultData = engine.ProcessBlock(byteData, 0, byteData.Length); return Convert.ToBase64String(ResultData);
            }
            catch (Exception ex) { throw ex; }
        }


   private AsymmetricKeyParameter GetPublicKeyParameter(string keyBase64)
        {
            keyBase64 = keyBase64.Replace("\r", "").Replace("\n", "").Replace(" ", ""); byte[] publicInfoByte = Convert.FromBase64String(keyBase64);
            Asn1Object pubKeyObj = Asn1Object.FromByteArray(publicInfoByte);//这里也可以从流中读取,从本地导入
            AsymmetricKeyParameter pubKey = PublicKeyFactory.CreateKey(publicInfoByte);
            return pubKey;
        }


.net rsa加密->java 解密 1.//非对称加密算法,加解密用 using Org.BouncyCastle.Crypto;  //使用第三方组件否则java服务端接收到的参数解释失败
            IAsymmetricBlockCipher engine = new Pkcs1Encoding(new RsaEngine());//加密2.  pwd = System.Net.WebUtility.UrlEncode(pwd); //java服务端接收信息乱码 get url请求时
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值