栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C#RSA对接JAVA中RSA方式代码实例

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#RSA对接JAVA中RSA方式代码实例

C#中通过FromXmlString属性加载的是XML形式,而JAVA中用到的是解析后的PEM格式的字符串,总之读取证书中信息无非是转换方式问题

/// 
    /// c# 使用 java 的公钥进行rsa加密 utf8编码  通过解析公钥加密数据
    /// 
    /// 
    /// 
    public static string RSAEncrypts(string content)
    {

      RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
      byte[] cipherbytes;
      X509Certificate2 x509Certificate2 = new X509Certificate2("D:\Config\dsptest.cer");
      //创建并返回当前算法对象的xml字符串表示形式
      string publicKeyString = x509Certificate2.PublicKey.Key.ToXmlString(false);
      rsa.FromXmlString(publicKeyString);
      //rsa.FromXmlString(RSAPublicKeyJava2DotNet(publicKeyString));
      cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
      return Convert.Tobase64String(cipherbytes);  
    }

      /// 
      /// 私钥解密 通过解析私钥来解析数据 X509KeyStorageFlags.Exportable这个属性很关键是获取私钥信息的
      /// 
      /// 
      /// 
      /// 
     public static string RSADecrypt( string content)
    {
      byte[] rgb = Convert.Frombase64String(content);
      RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
      byte[] cipherbytes;
      X509Certificate2 x509Certificate2 = new X509Certificate2("D:\Config\test.pfx", "cfca1234", X509KeyStorageFlags.Exportable);
      //创建并返回当前算法对象的xml字符串表示形式
      //rsa.FromXmlString(RSAPrivateKeyJava2DotNet(Const.privatekey));

      rsa.FromXmlString(x509Certificate2.PrivateKey.ToXmlString(true));
      cipherbytes = rsa.Decrypt(Convert.Frombase64String(content), false);
      return Encoding.UTF8.GetString(cipherbytes);      
    }

///  
/// RSA公钥格式转换,java->.net
/// 
/// java生成的公钥
/// 
public static string RSAPublicKeyJava2DotNet(string publicKey)
{
RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.Frombase64String(publicKey));
return string.Format("{0}{1}",
Convert.Tobase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()),
Convert.Tobase64String(publicKeyParam.Exponent.ToByteArrayUnsigned()));
}

/// 
/// RSA私钥格式转换,java->.net
/// 
/// java生成的RSA私钥
/// 
public static string RSAPrivateKeyJava2DotNet(string privateKey)
{
 RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.Frombase64String(privateKey));

return string.Format("{0}{1}

{2}

{3}{4}{5}{6}{7}
", 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())); }

以上实例大家可以测试下,感谢大家对考高分网的支持。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/122393.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号