http://www.cnblogs.com/weekzero/archive/2007/12/05/983143.html
http://www.wesoho.com/article/net/2182.htm
http://www.3s8.cn/develop/c1/200611/324.html

解决方案 »

  1.   

    能否具体一些,比如说  DES des = new DES(4564567899L);
    这一句在C#里如何写,谢谢!
      

  2.   

    DES加密解密
      

  3.   

    DES des = new DES(4564567899L);
    这句话Java和C#是一样的,光从你帖出的这段代码来看Java和C#几乎一样,关键是DES类在Java中是怎么实现的。
      

  4.   

    在C#里运行时提示 :无法创建抽象类或接口“System.Security.Cryptography.DES”的实例
      

  5.   

    能明白?using System;   
    using System.Security.Cryptography;   
    using System.IO;   
    using System.Text;   
      
    namespace NetTrade   
    {   
     /// <summary>   
     /// Security 的摘要说明。   
     /// 类中URL及帐号加密使用了不同的KEY。调用URL加密过程如下:    
     ///EIP.Framework.Security objSecurity = new EIP.Framework.Security();    
     ///objSecurity.EncryptQueryString(''待加密的字符串'');    
     ///解密:objSecurity.DecryptQueryString(''传递过来的参数);   
     /// </summary>   
     public class Security   
     {   
      string _QueryStringKey = "yx139222"; //URL传输参数加密Key    
      string _PassWordKey = "yx139222";  //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];      
       for(int x = 0; x < pToDecrypt.Length / 2; x++)      
       {      
        int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));      
        inputByteArray[x]  =  (byte)i;      
       }      
         
       des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);  //建立加密对象的密钥和偏移量,此值重要,不能修改      
       des.IV  = ASCIIEncoding.ASCII.GetBytes(sKey);      
       MemoryStream ms = new MemoryStream();      
       CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);      
           
       cs.Write(inputByteArray, 0, inputByteArray.Length);      
       cs.FlushFinalBlock();      
      
       StringBuilder ret = new StringBuilder();  //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象      
                     
       return System.Text.Encoding.Default.GetString(ms.ToArray());      
      }     
      
      ///     
      /// 检查己加密的字符串是否与原文相同    
      ///     
      ///     
      ///     
      ///     
      ///     
      public bool ValidateString(string EnString, string FoString, int Mode)    
      {    
       switch (Mode)    
       {    
        default:    
        case 1:    
         if (Decrypt(EnString,_QueryStringKey) == FoString.ToString())    
         {    
          return true;    
         }    
         else    
         {    
          return false;    
         }    
        case 2:    
         if (Decrypt(EnString,_PassWordKey) == FoString.ToString())    
         {    
          return true;    
         }    
         else    
         {    
          return false;    
         }    
       }    
      }   
      
    //以下为另外一种加解密方式,比较简单    
      
      public string DecryptStr(string rs) //顺序减1解码   
      {   
       byte[] by=new byte[rs.Length];   
       for(int i=0;i<=rs.Length-1;i++)   
       {   
        by[i]=(byte)((byte)rs[i]-1);   
       }   
       rs="";   
       for(int i=by.Length-1;i>=0;i--)   
       {   
        rs+=((char)by[i]).ToString();   
       }   
       return rs;   
      }   
      
      public string EncryptStr(string rs) //倒序加1加密   
      {   
       byte[] by=new byte[rs.Length];   
       for(int i=0;i<=rs.Length-1;i++)   
       {   
        by[i]=(byte)((byte)rs[i]+1);   
       }   
       rs="";   
       for(int i=by.Length-1;i>=0;i--)   
       {   
        rs+=((char)by[i]).ToString();   
       }   
       return rs;   
      }   
     }    
    }   
      

  6.   

    自己改写了一段,但跟原java得出的结果不一致,不知何原因
            //加密
            public string encode(string s)
            {
                if (s == null)  return null;
                String res = "";            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                byte[] Keys = System.BitConverter.GetBytes(4564567899L);
                //DES des = new DES(getKey());
                byte space = 32;
                byte[] sBytes = Encoding.ASCII.GetBytes(s);
                //byte[] sBytes = Encoding.UTF8.GetBytes(s);
                int length = sBytes.Length ;
                int newLength = length + (8 - (length % 8)) % 8;
                byte[] newBytes = new byte[newLength];
                for (int i = 0; i < newLength; ++i)
                {
                    if (i <= length - 1)
                    {
                        newBytes[i] = sBytes[i];
                    }
                    else
                    {
                        newBytes[i] = space;
                    }}
                for (int i = 0; i < newLength / 8; ++i)
                {
                    byte[] theBytes = new byte[8];
                    for (int j = 0; j <= 7; ++j)
                    {
                        theBytes[j] = newBytes[(8 * i + j)];
                    }
                    
                    //long x = des.bytes2long(theBytes);
                    //long x = Convert.ToInt64(theBytes);
                    byte[] result = new byte[8];
                    
                   //des.long2bytes(des.encrypt(x), result);
                   ////////////////////////////////////////////////////////////
                    MemoryStream mStream = new MemoryStream();
                    CryptoStream cStream = new CryptoStream(mStream, des.CreateEncryptor(theBytes, Keys), CryptoStreamMode.Write);
                    cStream.Write(sBytes, 0, sBytes.Length);
                    //cStream.Write(theBytes, 0, theBytes.Length);
                    cStream.FlushFinalBlock();
                    result =  mStream.ToArray();                byte[] doubleResult = new byte[16];
                    for (int j = 0; j < 8; ++j)
                    {
                        doubleResult[(2 * j)] = (byte)((((char)result[j] & 0xF0) >> '4') + 97);
                        doubleResult[(2 * j + 1)] = (byte)(((char)result[j] & 0xF) + 'a');
                    }
                   res = res + System.Text.Encoding.Default.GetString(doubleResult);
                    //res = res + BitConverter.ToString(doubleResult) ;
                }
                return res.Trim();
            }