zoukankan      html  css  js  c++  java
  • C# 字符串和文件加解密 使用Cryptography

    public class EncryptionAndDecryption
        {
    
            /// <summary>
            /// 加密文件
            /// </summary>
            /// <param name="bytesToBeEncrypted"></param>
            /// <param name="passwordBytes"></param>
            /// <returns></returns>
            public byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes)
            {
                byte[] encryptedBytes = null;
    
                //把盐放在这里,换成符合你口味的:
                //salt字节必须至少为8个字节。
                byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
    
                using (MemoryStream ms = new MemoryStream())
                {
                    using (RijndaelManaged AES = new RijndaelManaged())
                    {
                        AES.KeySize = 256;
                        AES.BlockSize = 128;
    
                        var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
                        AES.Key = key.GetBytes(AES.KeySize / 8);
                        AES.IV = key.GetBytes(AES.BlockSize / 8);
    
                        AES.Mode = CipherMode.CBC;
    
                        using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write))
                        {
                            cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
                            cs.Close();
                        }
                        encryptedBytes = ms.ToArray();
                    }
                }
    
                return encryptedBytes;
            }
            /// <summary>
            /// 解密文件
            /// </summary>
            /// <param name="bytesToBeDecrypted"></param>
            /// <param name="passwordBytes"></param>
            /// <returns></returns>
            public byte[] AES_Decrypt(byte[] bytesToBeDecrypted, byte[] passwordBytes)
            {
                byte[] decryptedBytes = null;
    
                //把盐放在这里,换成符合你口味的:
                //salt字节必须至少为8个字节。
                byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
    
                using (MemoryStream ms = new MemoryStream())
                {
                    using (RijndaelManaged AES = new RijndaelManaged())
                    {
                        AES.KeySize = 256;
                        AES.BlockSize = 128;
    
                        var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
                        AES.Key = key.GetBytes(AES.KeySize / 8);
                        AES.IV = key.GetBytes(AES.BlockSize / 8);
    
                        AES.Mode = CipherMode.CBC;
    
                        using (var cs = new CryptoStream(ms, AES.CreateDecryptor(), CryptoStreamMode.Write))
                        {
                            cs.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length);
                            cs.Close();
                        }
                        decryptedBytes = ms.ToArray();
                    }
                }
    
                return decryptedBytes;
            }
            /// <summary>
            /// 字符串加密
            /// </summary>
            /// <param name="input"></param>
            /// <param name="password"></param>
            /// <returns></returns>
            public string EncryptText(string input, string password)
            {
                // Get the bytes of the string 获取字符串的字节数
                byte[] bytesToBeEncrypted = Encoding.UTF8.GetBytes(input);
                byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
    
                // Hash the password with SHA256 用SHA256散列密码
                passwordBytes = SHA256.Create().ComputeHash(passwordBytes);
    
                byte[] bytesEncrypted = AES_Encrypt(bytesToBeEncrypted, passwordBytes);
    
                string result = Convert.ToBase64String(bytesEncrypted);
    
                return result;
            }
    
            /// <summary>
            /// 字符串解密
            /// </summary>
            /// <param name="input"></param>
            /// <param name="password"></param>
            /// <returns></returns>
            public string DecryptText(string input, string password)
            {
                // Get the bytes of the string 获取字符串的字节数
                byte[] bytesToBeDecrypted = Convert.FromBase64String(input);
                byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
                passwordBytes = SHA256.Create().ComputeHash(passwordBytes);
    
                byte[] bytesDecrypted = AES_Decrypt(bytesToBeDecrypted, passwordBytes);
    
                string result = Encoding.UTF8.GetString(bytesDecrypted);
    
                return result;
            }
        }

    调用class,加密字符串,页面上可以看到效果

                EncryptionAndDecryption ed = new EncryptionAndDecryption();
                //加密 123456abc,key是111aaa
                var str = ed.EncryptText("123456abc","111aaa");
                //加密过后的字符串
                ViewBag.encryptStr = str;
                //解密后得到 123456abc
                ViewBag.decryptStr = ed.DecryptText(str,"111aaa");
     <div>加密:@ViewBag.encryptStr<br />解密:@ViewBag.decryptStr</div>

  • 相关阅读:
    lunix查询jdk安装路径
    (四)爬虫之动态网页
    (二)爬虫之数据提取
    图及其衍生算法(Graphs and graph algorithms)
    树及其衍生算法(Trees and tree algorithms)
    数据结构之链表(Linked list)
    查找与排序算法(Searching adn Sorting)
    数据结构之双端队列(Deque)
    数据结构之队列(Queue)
    多个git账号的SSH配置
  • 原文地址:https://www.cnblogs.com/footmark/p/11905073.html
Copyright © 2011-2022 走看看