博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C#一个字符串的加密与解密

Posted on 2010-12-16 16:27  Sky_KWolf  阅读(805)  评论(0编辑  收藏  举报

     设计应用程序时,为了防止一些敏感信息的泄露,通常需要对这些信息进行加密。以用户的登录密码为例,如果密码以明文的形式存储在数据表中,很容易就会被人发现;相反,如果密码以密文的形式储存,即使别人从数据表中发现了密码,也是加密之后的密码,根本不能使用。通过对密码进行加密,能够极大地提高系统的保密性。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static string encryptKey = "Oyea";    //定义密钥 

        #region 加密字符串 
        /// <summary> /// 加密字符串  
        /// </summary> 
        /// <param name="str">要加密的字符串</param> 
        /// <returns>加密后的字符串</returns> 
        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());//返回加密后的字符串 
        } 
        #endregion

        #region 解密字符串  
        /// <summary> 
        /// 解密字符串  
        /// </summary> 
        /// <param name="str">要解密的字符串</param> 
        /// <returns>解密后的字符串</returns> 
        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());       //返回解密后的字符串 
        } 
        #endregion

        static void Main(string[] args)
        {
            Console.Write("请输入要加密的字符串:");   //提示输入字符串     
            Console.WriteLine();                  //换行输入  
            string str = Console.ReadLine();     //记录输入的字符串     
            string strNew = Encrypt(str);              //加密字符串     
            Console.WriteLine("加密后的字符串:" + strNew);  //输出加密后的字符串     
            Console.WriteLine("解密后的字符串:" + Decrypt(strNew)); //解密字符串并输出    
            Console.ReadLine();
        }
    }
}