用DES和AES吧,C#有现成的啊,如果要自己写.,如果安全性不高,可以写些简单的,比如TEA了,背包公钥什么的

解决方案 »

  1.   

    举个例子吧
    string pwd="123456";
    //加密
    MessageBox.Show("加密后的字符串");
    //解密
    MessageBox.Show("解密后的字符串");
      

  2.   

    文件名:Security.CS
    using System;
    using System.Security.Cryptography;
    using System.IO;
    using System.Text;
    namespace EIP.Framework
    {
     /// 
     /// Security 的摘要说明。
     /// Security类实现.NET框架下的加密和解密。
     /// CopyRight [email protected]@[email protected]
     /// 
     public class Security
     {
      string _QueryStringKey = "abcdefgh"; //URL传输参数加密Key
      string _PassWordKey = "hgfedcba";  //PassWord加密Key
      public Security()
      {
       //
       // TODO: 在此处添加构造函数逻辑
       //
      }
      /// 
      /// 加密URL传输的字符串
      /// 
      /// 
      /// 
      public string EncryptQueryString(string QueryString)
      {
       return Encrypt(QueryString,_QueryStringKey);
      }
      /// 
      /// 解密URL传输的字符串
      /// 
      /// 
      /// 
      public string DecryptQueryString(string QueryString)
      {
       return Decrypt(QueryString,_QueryStringKey);
      }
      /// 
      /// 加密帐号口令
      /// 
      /// 
      /// 
      public string EncryptPassWord(string PassWord)
      {
       return Encrypt(PassWord,_PassWordKey);
      }
      /// 
      /// 解密帐号口令
      /// 
      /// 
      /// 
      public string DecryptPassWord(string PassWord)
      {
       return Decrypt(PassWord,_PassWordKey);
      }  /// 
      /// DEC 加密过程
      /// 
      /// 
      /// 
      /// 
      public string Encrypt(string pToEncrypt,string sKey)  
      {  
       DESCryptoServiceProvider des = new DESCryptoServiceProvider();  //把字符串放到byte数组中  
       
       byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);  
       //byte[]  inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);     des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);  //建立加密对象的密钥和偏移量
       des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);   //原文使用ASCIIEncoding.ASCII方法的GetBytes方法 
       MemoryStream ms = new MemoryStream();     //使得输入密码必须输入英文文本
       CryptoStream cs = new CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);     cs.Write(inputByteArray, 0, inputByteArray.Length);  
       cs.FlushFinalBlock();  
       StringBuilder ret = new  StringBuilder();  
       foreach(byte b in ms.ToArray())  
       {  
        ret.AppendFormat("{0:X2}", b);  
       }  
       ret.ToString();  
       return  ret.ToString();  
      }  
      /// 
      /// DEC 解密过程
      /// 
      /// 
      /// 
      /// 
      public string Decrypt(string pToDecrypt, string sKey)  
      {  
       DESCryptoServiceProvider des = new DESCryptoServiceProvider();     byte[] inputByteArray = new byte[pToDecrypt.Length / 2];  
    &nbsp;&nbsp;&nbsp;for(int x = 0; x < pToDecrypt.Length / 2; x++)&nbsp; 
    &nbsp;&nbsp;&nbsp;{&nbsp; 
    &nbsp;&nbsp;&nbsp;&nbsp;int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));&nbsp; 
    &nbsp;&nbsp;&nbsp;&nbsp;inputByteArray[x]&nbsp; =&nbsp; (byte)i;&nbsp; 
    &nbsp;&nbsp;&nbsp;}&nbsp; &nbsp;&nbsp;&nbsp;des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);&nbsp; //建立加密对象的密钥和偏移量,此值重要,不能修改&nbsp; 
    &nbsp;&nbsp;&nbsp;des.IV&nbsp; = ASCIIEncoding.ASCII.GetBytes(sKey);&nbsp; 
    &nbsp;&nbsp;&nbsp;MemoryStream ms = new MemoryStream();&nbsp; 
    &nbsp;&nbsp;&nbsp;CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);&nbsp; 
    &nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;cs.Write(inputByteArray, 0, inputByteArray.Length);&nbsp; 
    &nbsp;&nbsp;&nbsp;cs.FlushFinalBlock();&nbsp; 
    &nbsp;&nbsp;&nbsp;StringBuilder ret = new StringBuilder();&nbsp; //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象&nbsp; 
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    &nbsp;&nbsp;&nbsp;return System.Text.Encoding.Default.GetString(ms.ToArray());&nbsp; 
    &nbsp;&nbsp;} 
    &nbsp;&nbsp;/// 
    &nbsp;&nbsp;/// 检查己加密的字符串是否与原文相同
    &nbsp;&nbsp;/// 
    &nbsp;&nbsp;/// 
    &nbsp;&nbsp;/// 
    &nbsp;&nbsp;/// 
    &nbsp;&nbsp;/// 
    &nbsp;&nbsp;public bool ValidateString(string EnString, string FoString, int Mode)
    &nbsp;&nbsp;{
    &nbsp;&nbsp;&nbsp;switch (Mode)
    &nbsp;&nbsp;&nbsp;{
    &nbsp;&nbsp;&nbsp;&nbsp;default:
    &nbsp;&nbsp;&nbsp;&nbsp;case 1:
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Decrypt(EnString,_QueryStringKey) == FoString.ToString())
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
    &nbsp;&nbsp;&nbsp;&nbsp;case 2:
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (Decrypt(EnString,_PassWordKey) == FoString.ToString())
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
    &nbsp;&nbsp;&nbsp;}
    &nbsp;&nbsp;}
    &nbsp;}
    }
    类中URL及帐号加密使用了不同的KEY。调用URL加密过程如下:
    EIP.Framework.Security objSecurity = new EIP.Framework.Security();
    objSecurity.EncryptQueryString(''待加密的字符串'');
    解密:objSecurity.DecryptQueryString(''传递过来的参数);源文档 <http://blog.csdn.net/kangsoft/archive/2004/09/06/96225.aspx> 
      

  3.   

    再怎么加密都没用,人家只要反编译这个dll,就能看到源代码也自然能看到密码,所以必须从根本上解决这个问题