当前位置:K88软件开发文章中心编程语言.NET.NET02 → 文章内容

java与.net平台之间进行RSA加密验证

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2019-1-3 0:48:57

y())) + "</Exponent>");
            buff.append("</RSAKeyValue>");
            return buff.toString().replaceAll("[ \t\n\r]", "");
        } catch (Exception e) {
            System.err.println(e);
            return null;
        }
    }

通过以上两个方法,就可以将java端的公钥和私钥转换为.net端的了。

然后.net端可以用如下代码装载转换好的key

 //java端转换为.net端的私钥
                string NET_PRIVATE_KEY = @"<RSAKeyValue><Modulus>lKc3QnhdBGrA+Tkz0QvbgEWHDjS/AMp4bhwqFgQXdo+mIwC/8POr8GpgCpsY2GgU+PBIFI51q2U64aKFwQYQhxSiQI3r7kAa5+DVQVhheRlAaHz/iRMr2HqVkxqtjoTbNjVCMuTqgX7xu30YDcX9ZXSH0lGWCy3NEdzxBpOAtFk=</Modulus><Exponent>AQAB</Exponent><P>3eX5uQZalJF/tgosNUUV8ss4aVAwDntID63Ta6bFEnZFzp3YckXKGzmOQuygHK0tuUviN+BQFlk0eelMz3JMiQ==</P><Q>q3+YtH0B30ijTITtGWqNI+zXbhpodhVuugWHkihz9XKFQ7srbYA3YovvyOmK1Q/zlF92X3MFfUjRFWB/fEVVUQ==</Q><DP>Ey1tB7Ck43Ivt2vppjDyVKl7lp53iMje0XwUaZlgLthJ8DF0I2wkq3Wt9dq9e7z71qfYRTv9r/DFuEORf9xBAQ==</DP><DQ>n2ynDSmkIugIfeqX6meluv7BqWW9NABqhVz8kT8vxLzn63XEQi/NzLtfdbq8x6HjgktX5BUtxjB5xVCGUoS1cQ==</DQ><InverseQ>FNZDF90zR/2b/kevm4DomVTs7Iz/oaidOFsLQqD4BZfycuMdpTMAO8UUVtK5+eL7G24JaJAmb1U6QfkTc4syOQ==</InverseQ><D>cVf2aHZB5kZHkT+uZKx31xwsWAabxEyc+sf6xwKjqUDqWjIOJ/iDlzJkvHF5xjfGFfGP5CyjR+ZNuREkjwLCwjBiOhp34QMuN22LbKfHsvgHYiAOqkTxwASQ2FwaonA8nrfluHZhWECMrOSYag2QWuaOoToF91XvkNf8tBFcHQE=</D></RSAKeyValue>";
                //java端转换为.net端的公钥    
                //string NET_PUBLIC_KEY = @"<RSAKeyValue><Modulus>vpUk3hmR9kDdo8+AoLfFqpP/JlPkU6VDlMaDqF5WoNUQcdUsfUT4cQSZaa5O/aeDP2llvPL0paQmlXn1bV2A0dJKTnvlWNQC/QGFlcVIfSWeDaZnZDn/Z1XEqwBKMnZtCIQZQPws7kqlouV9CmjcA2i8Fm9S0fDl7F6CfJfJlsM=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
                RSA = new RSACryptoServiceProvider();
                RSA.FromXmlString(NET_PRIVATE_KEY);
               //RSA.FromXmlString(NET_PUBLIC_KEY);

注意,如果.net端只是验证,可以只导入NET_PUBLIC_KEY;如果.net端既加密又验证,那么只导入NET_PRIVATE_KEY即可,不用导入NET_PUBLIC_KEY。

下面给出完整代码及使用说明:
使用说明:
1.使用java端的GenerateKeys方法,生成java端和.net端需要的公钥和私钥
2.java端调用Sign方法进行加密,调用Verify方法进行验证
3..net端调用signData方法进行加密,调用verifySignature方法进行验证

.net端c#代码:
using System;
using System.Security.Cryptography;
using System.IO;
using System.Text;
using System.Xml;
using System.Web;
namespace RSASecurity
{
    class ssosign
    {
        private RSAParameters RSAKeyInfo;
        private static RSACryptoServiceProvider RSA=null;
        //私钥
        private const string NET_PRIVATE_KEY = @"<RSAKeyValue><Modulus>lKc3QnhdBGrA+Tkz0QvbgEWHDjS/AMp4bhwqFgQXdo+mIwC/8POr8GpgCpsY2GgU+PBIFI51q2U64aKFwQYQhxSiQI3r7kAa5+DVQVhheRlAaHz/iRMr2HqVkxqtjoTbNjVCMuTqgX7xu30YDcX9ZXSH0lGWCy3NEdzxBpOAtFk=</Modulus><Exponent>AQAB</Exponent><P>3eX5uQZalJF/tgosNUUV8ss4aVAwDntID63Ta6bFEnZFzp3YckXKGzmOQuygHK0tuUviN+BQFlk0eelMz3JMiQ==</P><Q>q3+YtH0B30ijTITtGWqNI+zXbhpodhVuugWHkihz9XKFQ7srbYA3YovvyOmK1Q/zlF92X3MFfUjRFWB/fEVVUQ==</Q><DP>Ey1tB7Ck43Ivt2vppjDyVKl7lp53iMje0XwUaZlgLthJ8DF0I2wkq3Wt9dq9e7z71qfYRTv9r/DFuEORf9xBAQ==</DP><DQ>n2ynDSmkIugIfeqX6meluv7BqWW9NABqhVz8kT8vxLzn63XEQi/NzLtfdbq8x6HjgktX5BUtxjB5xVCGUoS1cQ==</DQ><InverseQ>FNZDF90zR/2b/kevm4DomVTs7Iz/oaidOFsLQqD4BZfycuMdpTMAO8UUVtK5+eL7G24JaJAmb1U6QfkTc4syOQ==</InverseQ><D>cVf2aHZB5kZHkT+uZKx31xwsWAabxEyc+sf6xwKjqUDqWjIOJ/iDlzJkvHF5xjfGFfGP5CyjR+ZNuREkjwLCwjBiOhp34QMuN22LbKfHsvgHYiAOqkTxwASQ2FwaonA8nrfluHZhWECMrOSYag2QWuaOoToF91XvkNf8tBFcHQE=</D></RSAKeyValue>";
        //公钥参数
        private const string PUB_KEY_MODULES = @"1lpnLvumD8/NedJ7s4WS8UO9OORbXVTgJXmfa72bI4A1L1l6Np91BETQ+yB8Fq6iGWw5OR8OB2UbRBcopb2etepDqWd7kmCtbVT36kTW+E8dWdaVjbI2BCXEGaXuzPPdGOlp52OaawYR5zyG0MiCvJ4jE7RDJax4Cl24ZqPUs4U=";
        //公钥参数
        private const string PUB_KEY_EXP = @"AQAB";
        /**//// <summary>
        /// Reads the Public key file and Loads the RSAParameters with the
        /// Modulous and Exponent data.
        /// </summary>
        public ssosign(RSAType type)
        {
           
            RSA = new RSACryptoServiceProvider();
            //if (type == RSAType.ITDMS)
            //{
            //    RSAKeyInfo = new RSAParameters();
            //    RSAKeyInfo.Modulus = Convert.FromBase64String(PUB_KEY_MODULES);
            //    RSAKeyInfo.Exponent = Convert.FromBase64String(PUB_KEY_EXP);
            //    RSA.ImportParameters(RSAKeyInfo);
            //}
            //else //type == RSAType.RSP
            //{
                RSA.FromXmlString(NET_PRIVATE_KEY);
            //}
        }
        /**//// <summary>
        /// sign the data
        /// </summary>
        /// <param name="dataToBeSigned"></param>
        /// <returns></returns>
        public string signData(string dataToBeSigned)
        {
            byte[] data = Encoding.UTF8.GetBytes(dataToBeSigned);

            byte[] endata = RSA.SignData(data,"SHA1");

            return Convert.ToBase64String(endata);
          
        }
        /**//// <summary>
        /// Verifies the signature for a given data.
        /// </summary>
        /// <param name="signature">Signature data in Base64</param>
        /// <param name="signedData">Original data in BASE64</param>
        /// <returns>True if signature is valid else False</returns>
        public bool verifySignature(string signature,string signedData)
        {
            byte[] sign = Convert.FromBase64String(signature);
            return verifySignature(sign,signedData);
        }
        /**//// <summary>
        /// Verifies the signature for a given data.
        /// </summary>
        /// <param name="signature">The signature </param>
        /// <param name="signedData">Original data in Base64</param>
        /// <returns></returns>
        public bool verifySignature(byte[] signature , string signedData)
        {
            try
            {
                byte[] hash = Convert.FromBase64String(signedData);
                if(RSA.VerifyData(hash,"SHA1",signature))
                {
                    return true;
                }
                else
                {
                    //Consol

上一页  [1] [2] [3] [4] [5]  下一页


java与.net平台之间进行RSA加密验证