Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1195653
  • 博文数量: 146
  • 博客积分: 6619
  • 博客等级: 准将
  • 技术积分: 1621
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-29 14:06
文章分类

全部博文(146)

文章存档

2020年(1)

2019年(4)

2018年(3)

2017年(5)

2015年(5)

2014年(7)

2013年(5)

2012年(11)

2011年(15)

2010年(13)

2009年(14)

2008年(63)

分类: C#/.net

2014-09-24 03:00:30

字符串是经常使用的类型,怎样保存字符串才能最安全呢?答案就是加密。

可以利用C# 中 CryptoStream 来加密和解密字符串。CryptoStream方法如下:

主窗口响应代码如下:

点击(此处)折叠或打开

  1. private void btn_Encrypt_Click(object sender, EventArgs e)
  2.         {
  3.             if (txt_password.Text.Length == 4)//判断加密密钥长度是否正确
  4.             {
  5.                 try
  6.                 {
  7.                     txt_EncryptStr.Text = //调用实例ToEncrypt方法得到加密后的字符串
  8.                         new Encrypt().ToEncrypt(
  9.                         txt_password.Text, txt_str.Text);
  10.                     //Encrypt P_Encrypt = new Encrypt();
  11.                     //P_Encrypt.ToEncrypt(""
  12.                 }
  13.                 catch (Exception ex)//捕获异常
  14.                 {
  15.                     MessageBox.Show(ex.Message);//输出异常信息
  16.                 }
  17.             }
  18.             else
  19.             {
  20.                 MessageBox.Show("密钥长度不符!", "提示");//提示用户输入密钥长度不正确
  21.             }
  22.         }
  23.         private void btn_UnEncrypt_Click(object sender, EventArgs e)
  24.         {
  25.             if (txt_password2.Text.Length == 4)//判断加密密钥长度是否正确
  26.             {
  27.                 try
  28.                 {
  29.                     txt_str2.Text = //调用ToDecrypt方法得到解密后的字符串
  30.                         new Encrypt().ToDecrypt(
  31.                         txt_password2.Text, txt_EncryptStr2.Text);
  32.                 }
  33.                 catch (Exception ex)//捕获异常
  34.                 {
  35.                     MessageBox.Show(ex.Message);//输出异常信息
  36.                 }
  37.             }
  38.             else
  39.             {
  40.                 MessageBox.Show("密钥长度不符!", "提示");//提示用户输入密钥长度不正确
  41.             }
  42.         }
自定义类代码如下:

点击(此处)折叠或打开

  1. using System.Security.Cryptography;

  2. public class Encrypt
  3.     {

  4.         internal string ToEncrypt(string encryptKey, string str)
  5.         {
  6.             try
  7.             {
  8.                 byte[] P_byte_key = //将密钥字符串转换为字节序列
  9.                     Encoding.Unicode.GetBytes(encryptKey);
  10.                 byte[] P_byte_data = //将字符串转换为字节序列
  11.                     Encoding.Unicode.GetBytes(str);
  12.                 MemoryStream P_Stream_MS = //创建内存流对象
  13.                     new MemoryStream();
  14.                 CryptoStream P_CryptStream_Stream = //创建加密流对象
  15.                     new CryptoStream(P_Stream_MS,new DESCryptoServiceProvider().
  16.                    CreateEncryptor(P_byte_key, P_byte_key),CryptoStreamMode.Write);
  17.                 P_CryptStream_Stream.Write(//向加密流中写入字节序列
  18.                     P_byte_data, 0, P_byte_data.Length);
  19.                 P_CryptStream_Stream.FlushFinalBlock();//将数据压入基础流
  20.                 byte[] P_bt_temp =//从内存流中获取字节序列
  21.                     P_Stream_MS.ToArray();
  22.                 P_CryptStream_Stream.Close();//关闭加密流
  23.                 P_Stream_MS.Close();//关闭内存流
  24.                 return //方法返回加密后的字符串
  25.                     Convert.ToBase64String(P_bt_temp);
  26.             }
  27.             catch (CryptographicException ce)
  28.             {
  29.                 throw new Exception(ce.Message);
  30.             }
  31.         }

  32.         internal string ToDecrypt(string encryptKey, string str)
  33.         {
  34.             try
  35.             {
  36.                 byte[] P_byte_key = //将密钥字符串转换为字节序列
  37.                     Encoding.Unicode.GetBytes(encryptKey);
  38.                 byte[] P_byte_data = //将加密后的字符串转换为字节序列
  39.                     Convert.FromBase64String(str);
  40.                 MemoryStream P_Stream_MS =//创建内存流对象并写入数据
  41.                     new MemoryStream(P_byte_data);
  42.                 CryptoStream P_CryptStream_Stream = //创建加密流对象
  43.                     new CryptoStream(P_Stream_MS,new DESCryptoServiceProvider().
  44.                     CreateDecryptor(P_byte_key, P_byte_key),CryptoStreamMode.Read);
  45.                 byte[] P_bt_temp = new byte[200];//创建字节序列对象
  46.                 MemoryStream P_MemoryStream_temp =//创建内存流对象
  47.                     new MemoryStream();
  48.                 int i = 0;//创建记数器
  49.                 while ((i = P_CryptStream_Stream.Read(//使用while循环得到解密数据
  50.                     P_bt_temp, 0, P_bt_temp.Length)) > 0)
  51.                 {
  52.                     P_MemoryStream_temp.Write(//将解密后的数据放入内存流
  53.                         P_bt_temp, 0, i);
  54.                 }
  55.                 return //方法返回解密后的字符串
  56.                     Encoding.Unicode.GetString(P_MemoryStream_temp.ToArray());
  57.             }
  58.             catch (CryptographicException ce)
  59.             {
  60.                 throw new Exception(ce.Message);
  61.             }
  62.         }
  63.     }


阅读(1401) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~