using System;
using System.Security.Cryptography;
using System.IO;namespace WindowsApplication1
{
/// <summary>
/// Des 的摘要说明。
/// </summary>
public class Des
{

protected string inName;
protected string outName;
protected int keySize;
protected DES des;
private FileStream fin,fout;
private byte[] bin;
private long rdlen,totlen;
private int len;
private CryptoStream encStream; public Des()
{
inName="";
outName="";
keySize=128;
} public Des(string inFile,string outFile,int size)
{
inName=inFile;
outName=outFile;
keySize=size;
fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
fout.SetLength(0);
bin = new byte[100]; //用作加密存储的中间变量
rdlen = 0;              //记录写入的总字节数
totlen = fin.Length;    //输入文件的大小
} ~Des()
{
encStream.Close();  
fout.Close();
fin.Close();   
}
public void EncryptData()
{    
des = new DESCryptoServiceProvider();
des.GenerateIV();
des.GenerateKey();
encStream = new CryptoStream(fout, des.CreateEncryptor(des.Key, des.IV), CryptoStreamMode.Write);
while(rdlen < totlen)
{
len = fin.Read(bin, 0, 100);
encStream.Write(bin, 0, len);
rdlen = rdlen + len;
}               
} public void DecryptData()
{    
 
des = new DESCryptoServiceProvider();
des.GenerateIV();
des.GenerateKey();
encStream = new CryptoStream(fout, des.CreateDecryptor(des.Key, des.IV), CryptoStreamMode.Write);    
while(rdlen < totlen)
{
len = fin.Read(bin, 0, 100);
encStream.Write(bin, 0, len);
rdlen = rdlen + len;
}
               
} }
}

解决方案 »

  1.   

    using System;
    using System.Text;
    using System.Security.Cryptography;namespace Sanxing.WebControls.Licensing.Unit
    {
        /// <summary>
        /// 使用DES进行对称加密处理的工具类。
        /// </summary>
        internal sealed class DesUnit
        {
            // 密码
            private const string sKey = "sD2#bA*)";        /// <summary>
            /// 进行DES加密。
            /// </summary>
            /// <param name="pToEncrypt">要加密的字符串。</param>
            /// <returns>以Base64格式返回的加密字符串。</returns>
            public static string Encrypt(string pToEncrypt)
            {
                using(DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
    byte[]  inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);
    des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
    des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    using(CryptoStream cs = new CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write))
    {
    cs.Write(inputByteArray,0,inputByteArray.Length);
    cs.FlushFinalBlock();
    cs.Close();
    }
    string str = Convert.ToBase64String(ms.ToArray());
    ms.Close();
    return str;
                }
            }

            /// <summary>
            /// 进行DES解密。
            /// </summary>
            /// <param name="pToDecrypt">要解密的以Base64</param>
            /// <returns>已解密的字符串。</returns>
            public static string Decrypt(string pToDecrypt)
            {
                byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);
                using(DESCryptoServiceProvider des = new DESCryptoServiceProvider())
                {
    des.Key=ASCIIEncoding.ASCII.GetBytes(sKey);
    des.IV=ASCIIEncoding.ASCII.GetBytes(sKey);
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    using(CryptoStream cs = new CryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write))
    {
    cs.Write(inputByteArray,0,inputByteArray.Length);
    cs.FlushFinalBlock();
    cs.Close();
    }
    string str = Encoding.UTF8.GetString(ms.ToArray());
    ms.Close();
    return str;
        }
            }
        }
    }
    输出的加密数据是以Base64编码的,支持中文。
      

  2.   

    Base64String里面有+,\,=,如果我不想要这些字符,只想要数字和字母
    怎么办?