首页 > 其他 > 详细

Aes文件的加密和加密

时间:2020-04-19 21:43:19      阅读:59      评论:0      收藏:0      [点我收藏+]

前几天遇到一个关于使用Aes算法加密解密字符串或者txt文件的问题,接下来我将用C#来编程aes算法加密和解密,代码如下

 这是button的核心代码:
private void Button_Click(object sender, RoutedEventArgs e) { string str1 = "明文.txt"; string str2 = "密文.txt"; if (p1.Password.Length<5) { MessageBox.Show("密码不能低于5位"); return; } byte[] key, iv; aes.GenKeyIV(p1.Password, out key, out iv); string ss = ""; FileStream fs = new FileStream(str1, FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(fs); ss = sr.ReadToEnd(); fs.Close(); sr.Close(); a1.Text = "原始字符串:" + ss; byte[] data1 = aes.EncryptString(str1, str2, key, iv); string encryptedString = Convert.ToBase64String(data1); a1.Text += "\n加密后的字符串:" + encryptedString; byte[] data2 = Convert.FromBase64String(encryptedString); string s = aes.DescrptString(data2, key, iv); a1.Text += "\n解密后的字符串:" + s; }
创建一个aes类,核心代码为:
public static byte[] EncryptString(string str1, string str2, byte[] key, byte[] iv)  //使用AES算法加密字符串
        {
            string ss = "";
            FileStream fs = new FileStream(str1, FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(fs);
            ss = sr.ReadToEnd();
            fs.Close();
            sr.Close();

            FileStream fs1 = new FileStream(str2, FileMode.Create, FileAccess.Write);
            using (Aes aesAlg = Aes.Create())
            {
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(key, iv);
                CryptoStream cs = new CryptoStream(fs1, encryptor, CryptoStreamMode.Write);
                using (StreamWriter sw = new StreamWriter(cs))
                {
                    sw.Write(ss);
                }
                cs.Close();
                fs1.Close();
            }
            fs1 = new FileStream(str2, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs1);
            byte[] encrypted = br.ReadBytes(10240);
            br.Close();
            fs1.Close();
            return encrypted;
        }
        public static string DescrptString(byte[] data, byte[] key, byte[] iv)  //使用AES算法解密字符串
        {
            string str = "";
            using (Aes aesAlg = Aes.Create())
            {
                ICryptoTransform decryptor = aesAlg.CreateDecryptor(key, iv);
                MemoryStream ms = new MemoryStream(data);
                CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
                using (StreamReader sr = new StreamReader(cs))
                {
                    str = sr.ReadToEnd();
                }
                cs.Close();
                ms.Close();
            }
            return str;
        }
        public static void GenKeyIV(string password, out byte[] key, out byte[] iv)   //根据提供的密码生成key和IV
        {
            using (Aes aes = Aes.Create())
            {
                key = new byte[aes.Key.Length];
                byte[] pwdBytes = Encoding.UTF8.GetBytes(password);
                for (int i = 0; i < pwdBytes.Length; i++)
                {
                    key[i] = pwdBytes[i];
                }
                iv = new byte[aes.IV.Length];
                for (int i = 0; i < pwdBytes.Length; i++)
                {
                    iv[i] = pwdBytes[i];
                }
            }
        }
        public static void GenKeyIV(out byte[] key, out byte[] iv)   //随机生成Key和IV
        {
            using (Aes aes = Aes.Create())
            {
                key = aes.Key;
                iv = aes.IV;
            }
        }

运行之后的结果为:

技术分享图片

 

加密后的字符串会根据你填写的密码框数据而改变。

以上就是C#运用AES算法加密的过程,如果对大家有帮助的话,可以点波关注或收藏哦。

 

Aes文件的加密和加密

原文:https://www.cnblogs.com/lcy-4/p/12733572.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!