C#RSA对接JAVA中RSA方式代码实例
C#中通过FromXmlString属性加载的是XML形式,而JAVA中用到的是解析后的PEM格式的字符串,总之读取证书中信息无非是转换方式问题
//////c#使用java的公钥进行rsa加密utf8编码通过解析公钥加密数据 /// ////// publicstaticstringRSAEncrypts(stringcontent) { RSACryptoServiceProviderrsa=newRSACryptoServiceProvider(); byte[]cipherbytes; X509Certificate2x509Certificate2=newX509Certificate2("D:\\Config\\dsptest.cer"); //创建并返回当前算法对象的xml字符串表示形式 stringpublicKeyString=x509Certificate2.PublicKey.Key.ToXmlString(false); rsa.FromXmlString(publicKeyString); //rsa.FromXmlString(RSAPublicKeyJava2DotNet(publicKeyString)); cipherbytes=rsa.Encrypt(Encoding.UTF8.GetBytes(content),false); returnConvert.ToBase64String(cipherbytes); } /// ///私钥解密通过解析私钥来解析数据X509KeyStorageFlags.Exportable这个属性很关键是获取私钥信息的 /// ////// /// publicstaticstringRSADecrypt(stringcontent) { byte[]rgb=Convert.FromBase64String(content); RSACryptoServiceProviderrsa=newRSACryptoServiceProvider(); byte[]cipherbytes; X509Certificate2x509Certificate2=newX509Certificate2("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); returnEncoding.UTF8.GetString(cipherbytes); }
/***************以下是java提供的公私钥转成.net公私钥XML的方式*************************************/ //////RSA公钥格式转换,java->.net /// ///java生成的公钥 /// publicstaticstringRSAPublicKeyJava2DotNet(stringpublicKey) { RsaKeyParameterspublicKeyParam=(RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey)); returnstring.Format(" ", Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()), Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned())); } /// {0} {1} ///RSA私钥格式转换,java->.net /// ///java生成的RSA私钥 /// publicstaticstringRSAPrivateKeyJava2DotNet(stringprivateKey) { RsaPrivateCrtKeyParametersprivateKeyParam=(RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey)); returnstring.Format(" ", 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())); } {0} {1} {2}
{3}{4} {5} {6} {7}
以上实例大家可以测试下,感谢大家对毛票票的支持。