Skip to main content
 首页 » 编程设计

c#之c#.net中的简单加密算法

2024年01月18日14傻小

我正在尝试从文件中读取文本并对其进行加密并将其传递给字符串格式的函数。
后来我也想解密。

我尝试了以下但它没有做任何加密。谁能建议任何简单的加密算法?

fileStream = store.OpenFile(strFilePath, FileMode.Open, FileAccess.Read); 
strEncryptedFileStream = Encoding.Unicode.GetBytes(fileStream.ToString()).ToString(); 

请您参考如下方法:

使用 AES .这是一个帮助类。使用“简单”,或者换句话说,容易破解的加密是没有意义的。要么你希望人们能够打破它,要么你不。选择众所周知并经过测试的加密标准。

如果下面的示例不能满足您的需要,您可以修改它。

using System; 
using System.IO; 
using System.Security.Cryptography; 
using System.Text; 
using System.Diagnostics; 
 
namespace Common.Cryptography 
{ 
    /// <summary> 
    /// AES is a symmetric 256-bit encryption algorthm. 
    /// Read more: http://en.wikipedia.org/wiki/Advanced_Encryption_Standard 
    /// </summary> 
    public static class AES 
    { 
        private const string _SALT = "g46dzQ80"; 
        private const string _INITVECTOR = "OFRna74m*aze01xY"; 
 
        private static byte[] _saltBytes; 
        private static byte[] _initVectorBytes; 
 
        static AES() 
        { 
            _saltBytes = Encoding.UTF8.GetBytes(_SALT); 
            _initVectorBytes = Encoding.UTF8.GetBytes(_INITVECTOR); 
        } 
 
 
        /// <summary> 
        /// Encrypts a string with AES 
        /// </summary> 
        /// <param name="plainText">Text to be encrypted</param> 
        /// <param name="password">Password to encrypt with</param>    
        /// <param name="salt">Salt to encrypt with</param>     
        /// <param name="initialVector">Needs to be 16 ASCII characters long</param>     
        /// <returns>An encrypted string</returns>         
        public static string Encrypt(string plainText, string password, string salt = null, string initialVector = null) 
        { 
            return Convert.ToBase64String(EncryptToBytes(plainText, password, salt, initialVector)); 
        } 
 
        /// <summary> 
        /// Encrypts a string with AES 
        /// </summary> 
        /// <param name="plainText">Text to be encrypted</param> 
        /// <param name="password">Password to encrypt with</param>    
        /// <param name="salt">Salt to encrypt with</param>     
        /// <param name="initialVector">Needs to be 16 ASCII characters long</param>     
        /// <returns>An encrypted string</returns>         
        public static byte[] EncryptToBytes(string plainText, string password, string salt = null, string initialVector = null) 
        { 
            byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText); 
            return EncryptToBytes(plainTextBytes, password, salt, initialVector); 
        } 
 
        /// <summary> 
        /// Encrypts a string with AES 
        /// </summary> 
        /// <param name="plainTextBytes">Bytes to be encrypted</param> 
        /// <param name="password">Password to encrypt with</param>    
        /// <param name="salt">Salt to encrypt with</param>     
        /// <param name="initialVector">Needs to be 16 ASCII characters long</param>     
        /// <returns>An encrypted string</returns>         
        public static byte[] EncryptToBytes(byte[] plainTextBytes, string password, string salt = null, string initialVector = null) 
        { 
            int keySize = 256; 
 
            byte[] initialVectorBytes = string.IsNullOrEmpty(initialVector) ? _initVectorBytes : Encoding.UTF8.GetBytes(initialVector); 
            byte[] saltValueBytes = string.IsNullOrEmpty(salt) ? _saltBytes : Encoding.UTF8.GetBytes(salt); 
            byte[] keyBytes = new Rfc2898DeriveBytes(password, saltValueBytes).GetBytes(keySize / 8); 
 
            using (RijndaelManaged symmetricKey = new RijndaelManaged()) 
            { 
                symmetricKey.Mode = CipherMode.CBC; 
 
                using (ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initialVectorBytes)) 
                { 
                    using (MemoryStream memStream = new MemoryStream()) 
                    { 
                        using (CryptoStream cryptoStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write)) 
                        { 
                            cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length); 
                            cryptoStream.FlushFinalBlock(); 
 
                            return memStream.ToArray(); 
                        } 
                    } 
                } 
            } 
        } 
 
        /// <summary>   
        /// Decrypts an AES-encrypted string.  
        /// </summary>   
        /// <param name="cipherText">Text to be decrypted</param>  
        /// <param name="password">Password to decrypt with</param>  
        /// <param name="salt">Salt to decrypt with</param>  
        /// <param name="initialVector">Needs to be 16 ASCII characters long</param>  
        /// <returns>A decrypted string</returns> 
        public static string Decrypt(string cipherText, string password, string salt = null, string initialVector = null) 
        { 
            byte[] cipherTextBytes = Convert.FromBase64String(cipherText.Replace(' ','+')); 
            return Decrypt(cipherTextBytes, password, salt, initialVector).TrimEnd('\0'); 
        } 
 
        /// <summary>   
        /// Decrypts an AES-encrypted string.  
        /// </summary>   
        /// <param name="cipherText">Text to be decrypted</param>  
        /// <param name="password">Password to decrypt with</param>  
        /// <param name="salt">Salt to decrypt with</param>  
        /// <param name="initialVector">Needs to be 16 ASCII characters long</param>  
        /// <returns>A decrypted string</returns> 
        public static string Decrypt(byte[] cipherTextBytes, string password, string salt = null, string initialVector = null) 
        { 
            int keySize = 256; 
 
            byte[] initialVectorBytes = string.IsNullOrEmpty(initialVector) ? _initVectorBytes : Encoding.UTF8.GetBytes(initialVector); 
            byte[] saltValueBytes = string.IsNullOrEmpty(salt) ? _saltBytes : Encoding.UTF8.GetBytes(salt); 
            byte[] keyBytes = new Rfc2898DeriveBytes(password, saltValueBytes).GetBytes(keySize / 8); 
            byte[] plainTextBytes = new byte[cipherTextBytes.Length]; 
 
            using (RijndaelManaged symmetricKey = new RijndaelManaged()) 
            { 
                symmetricKey.Mode = CipherMode.CBC; 
 
                using (ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initialVectorBytes)) 
                { 
                    using (MemoryStream memStream = new MemoryStream(cipherTextBytes)) 
                    { 
                        using (CryptoStream cryptoStream = new CryptoStream(memStream, decryptor, CryptoStreamMode.Read)) 
                        { 
                            int byteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); 
 
                            return Encoding.UTF8.GetString(plainTextBytes, 0, byteCount); 
                        } 
                    } 
                } 
            } 
        } 
    } 
}