【C#】对字符串进行加密操作实现本地加密存储

正文索引 [隐藏]

我们在日常写代码的过程中接触字符串是非常多的,对字符串进行加密也是很有必要的,比如一个登录界面点记住密码后,把账号密码存储的本地要以明文形式传输吗,这样很不安全,而且是对数据库的一些重要数据是必须要有的,否则被人SELECT一下数据不就全都显示出来了吗,数据进行加密也不是很难,我们开始吧

一、加密方法

            static string encryptKey = "Oyea";    //定义密钥
/// <summary>
/// 加密字符串
/// </summary>
/// <param name="str">要加密的字符串</param>
/// <returns>加密后的字符串</returns>
public static string Encrypt(string str)
{
DESCryptoServiceProvider descsp = new DESCryptoServiceProvider(); //实例化加/解密类对象
byte[] key = Encoding.Unicode.GetBytes(encryptKey); //定义字节数组,用来存储密钥
byte[] data = Encoding.Unicode.GetBytes(str);//定义字节数组,用来存储要加密的字符串
MemoryStream MStream = new MemoryStream(); //实例化内存流对象
//使用内存流实例化加密流对象
CryptoStream CStream = new CryptoStream(MStream, descsp.CreateEncryptor(key, key), CryptoStreamMode.Write);
CStream.Write(data, 0, data.Length); //向加密流中写入数据
CStream.FlushFinalBlock(); //释放加密流
return Convert.ToBase64String(MStream.ToArray());//返回加密后的字符串
}

传参和里面的方法写的还是比较详细的了

二、解密方法

        /// <summary>
/// 解密字符串
/// </summary>
/// <param name="str">要解密的字符串</param>
/// <returns>解密后的字符串</returns>
public static string Decrypt(string str)
{
DESCryptoServiceProvider descsp = new DESCryptoServiceProvider(); //实例化加/解密类对象
byte[] key = Encoding.Unicode.GetBytes(encryptKey); //定义字节数组,用来存储密钥
byte[] data = Convert.FromBase64String(str);//定义字节数组,用来存储要解密的字符串
MemoryStream MStream = new MemoryStream(); //实例化内存流对象
//使用内存流实例化解密流对象
CryptoStream CStream = new CryptoStream(MStream, descsp.CreateDecryptor(key, key), CryptoStreamMode.Write);
CStream.Write(data, 0, data.Length); //向解密流中写入数据
CStream.FlushFinalBlock(); //释放解密流
return Encoding.Unicode.GetString(MStream.ToArray()); //返回解密后的字符串
}

我们来看具体怎么用呢,就以记住账号密码号存在app.config为例,以密文存储进去,然后加载的时候进行解密操作,怎么写呢,来看下一步操作

三、明文字符串加密载入app.config

                                    string strNew = Encrypt(PasswordBox.Password);        //加密字符串
Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
cfa.AppSettings.Settings["password"].Value = strNew;
cfa.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings"); //刷新

我们在登录成功后把该字符串明文加密加密后把值加载到app.config的value里面去,然后我们怎么在记住密码后,把app.config里面的value里面的密文解密加载的密码框里面呢

四、解密加载

            string passwordNew = AppConfigBase.GetSettingString("password");
TextBox1.Text = AppConfigBase.GetSettingString("userName");
if (passwordNew.Trim() != "")
{
PasswordBox.Password = Decrypt(passwordNew);
}

这样就完成啦,当然你肯定要去app.config里面添加一个key来做识别,不然不可能实现的

blank