牛骨文教育服务平台(让学习变的简单)
博文笔记

C#实现标准JAVA的Md5withRsa算法

创建时间:2015-06-19 投稿人: 浏览次数:2045

确认可行的方法
 public static String pfxpath = @"E:xxx.pfx";
        public static String cerpath = @"E:xxxx.cer";
        public static String pfxpassword = "111111"; 

        /// <summary>
        /// 签名
        /// </summary>
        /// <param name="xml">xml数据</param>
        /// <returns>签名数据</returns>
        public static String signData(String xml) 
        {
            Console.WriteLine("加载数字证书私钥:"+ pfxpath + "证书密码:" +  pfxpassword); 
            //签名 
            Console.WriteLine("--------开始使用私钥创建例子"); 
            Console.WriteLine("--------需要签名的:" + xml); 
           // X509Certificate2 objx5092 = new X509Certificate2(pfxpath, pfxpassword);   //当前用户存储,本地测试
            X509Certificate2 objx5092 = new X509Certificate2(pfxpath, pfxpassword,X509KeyStorageFlags.MachineKeySet);   //本地存储,服务器测试(windows server2008)要使用这个

            RSACryptoServiceProvider rsa = objx5092.PrivateKey as RSACryptoServiceProvider;   
            byte[] data = Encoding.GetEncoding("GBK").GetBytes(xml); 
            byte[] hashValue = rsa.SignData(data, "MD5");
            string msg = Convert.ToBase64String(hashValue);          
            Console.WriteLine("--------得到:" + msg);

            return msg;
        }

        /// 
        /// 解签 
        /// </summary>
        /// <param name="signData">解签数据</param>
        /// <returns>是否成功</returns>
        public  bool verifyData(String msg, String check)
        {
            byte[] msgByte = System.Convert.FromBase64String(msg);
            byte[] checkByte = System.Convert.FromBase64String(check);
            X509Certificate2 pub = new X509Certificate2(cerpath);
            RSACryptoServiceProvider rsaPublic = pub.PublicKey.Key as RSACryptoServiceProvider;
            return rsaPublic.VerifyData(msgByte, "MD5", checkByte);
        }

此方式等同于JAVA mad5withrsa
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。