注册 登录
编程论坛 C# 论坛

求大神帮我把这个用C#写成一个程序。感激不尽

qq283006567 发布于 2015-10-22 18:05, 1859 次点击
本人新手,求教应该如何将如下代码写成完整的C#程序,用来加密和解密XML文件,代码如下,感谢。

报文采用标准的AES加密,加密的密钥: MYgGnQE2+DAS973vd1DFHg==
请查看下面的代码示例进行文件加密
2.2    C#版代码示例
public static class AESHelper
    {
        /// <summary>
        ///  密钥
        /// </summary>
        private static String Key = "MYgGnQE2+DAS973vd1DFHg==";

        /// <summary>
        ///  AES 解密
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string Decrypt(string str)
        {
            if (string.IsNullOrEmpty(str)) return null;
            Byte[] toEncryptArray = Convert.FromBase64String(str);

            System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
            {
                Key = Convert.FromBase64String(Key),
                Mode = System.Security.Cryptography.CipherMode.ECB,
                Padding = System.Security.Cryptography.PaddingMode.PKCS7
            };

            System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateDecryptor();
            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

            return Encoding.UTF8.GetString(resultArray);
        }

        /// <summary>
        ///  加密
        /// </summary>
        /// <param name="toEncrypt"></param>
        /// <returns></returns>
        public static string Encrypt(string toEncrypt)
        {
            byte[] toEncryptArray = Encoding.UTF8.GetBytes(toEncrypt);

            System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
            {
                Key = Convert.FromBase64String(Key),
                Mode = System.Security.Cryptography.CipherMode.ECB,
                Padding = System.Security.Cryptography.PaddingMode.PKCS7
            };

            ICryptoTransform cTransform = rm.CreateEncryptor();
            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
        }
    }
3 回复
#2
Spy0012015-10-27 00:11
大胸弟,这是老师布置的作业题吧
#3
shine_arp2015-11-20 14:25
        private void btnEncrypt_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.OpenFileDialog openSelectFile = new System.Windows.Forms.OpenFileDialog();
            openSelectFile.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;
            openSelectFile.Filter = "xml files (*.xml)|*.xml";
            openSelectFile.FilterIndex = 1;
            openSelectFile.RestoreDirectory = true;

            if (openSelectFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string selectFile = openSelectFile.FileName;
                if ((selectFile))
                {
                    System.Xml.Linq.XElement xe = System.Xml.Linq.XElement.Load(selectFile);
                    string strXe = xe.ToString();
                    string encryXe = AESHelper.Encrypt(strXe);
                    try
                    {
                        using ( sw = new ("EncryXml" + DateTime.Now.Ticks+".aes"))
                        {
                            sw.Write(encryXe);
                            sw.Flush();
                            sw.Close();                           
                        }
                    }
                    catch (Exception ex)
                    {
                        System.Windows.MessageBox.Show("保存加密文件失败,异常:" + ex.Message, "Error");
                    }
                }
                else
                {
                    System.Windows.MessageBox.Show("请选择正确的文件!", "Error");
                }
            }
        }

        private void btnDecrypt_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.OpenFileDialog openSelectFile = new System.Windows.Forms.OpenFileDialog();
            openSelectFile.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;
            openSelectFile.Filter = "AES files (*.aes)|*.aes";
            openSelectFile.FilterIndex = 1;
            openSelectFile.RestoreDirectory = true;

            if (openSelectFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string selectFile = openSelectFile.FileName;
                if ((selectFile))
                {
                     sr = new (selectFile);
                    string strFile = sr.ReadToEnd();
                    string decryStr = AESHelper.Decrypt(strFile);
                    try
                    {
                        System.Xml.Linq.XElement xe = System.Xml.Linq.XElement.Parse(decryStr);
                        string saveXmlName = "DecryptXml" + DateTime.Now.Ticks + ".xml";
                        xe.Save(saveXmlName);
                    }
                    catch (Exception ex)
                    {
                        System.Windows.MessageBox.Show("保存解密文件失败,异常:" + ex.Message, "Error");
                    }
                }
                else
                {
                    System.Windows.MessageBox.Show("请选择正确的文件!", "Error");
                }
            }
        }
#4
深秋20152015-11-20 14:26
以下是引用Spy001在2015-10-27 00:11:12的发言:

大胸弟,这是老师布置的作业题吧

大胸弟?
1