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>

  • 相关阅读:
    [转载]JavaScript世界的一等公民 函数
    JavaScript基础知识词法结构
    JavaScript触发asp.net服务器端控件事件
    WinForm窗体间传值大全
    快速导入Excel
    让虚拟机支持USB HDD 启动
    常见的mysql导出excel工具介绍
    silverlight 播放器,丑丑版
    快速导出Excel
    一个C#编写QQ接口软件QQ协议(转)
  • 原文地址:https://www.cnblogs.com/footmark/p/11905073.html
Copyright © 2011-2022 走看看