晕,都几点了,人都下班了,谁会来顶啊?谁说我们在乎分了?????!!!!
在DES中,key是一个8位的byte[],
对于 RC2、DES 和 TripleDES,n = 8 字节;n = 16 [默认值];n = 24;对于 Rijndael,n = 32),
ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconcryptographyoverview.htm
源代码:
#region "自定义对象"
private const string inFile="C:\\Test.ini";
private const string outFile="C:\\DES.ini";
private const string lastFile="C:\\DeDES.ini";
private DES des = new DESCryptoServiceProvider();
private byte[] thisKey;
private byte[] thisIV;
#endregion
public ClassDES()
{
byte[] keyMy=new byte[]{10,10,10,10,10,10,10,10};
byte[] ivMy=new byte[]{5,5,5,5,5,5,5,5};
//des.GenerateKey();
//des.GenerateIV();
//this.DESWriter(inFile,outFile);
//this.DESDeWriter(outFile,lastFile);
this.MyDESWriter(inFile,outFile,keyMy,ivMy);
} public void DESWriter(String inName, String outName,byte[] desKey,byte[] desIV)
{
FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
fout.SetLength(0);
       
byte[] bin = new byte[100]; 
long rdlen = 0;      
long totlen = fin.Length; 
int len;    
    
CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);
                
Console.WriteLine("Encrypting...");
 
while(rdlen < totlen)
{
len = fin.Read(bin, 0, 100);
encStream.Write(bin, 0, len);
rdlen = rdlen + len;
Console.WriteLine("{0} bytes processed", rdlen);
}
encStream.Close();  
fout.Close();
fin.Close();
}public void DESWriter(String inName, String outName)
{
FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
fout.SetLength(0);
       
byte[] bin = new byte[100]; 
long rdlen = 0;   
long totlen = fin.Length;
int len;             
         
CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(), CryptoStreamMode.Write);
this.thisKey=des.Key;
this.thisIV=des.IV;
                
Console.WriteLine("Encrypting...");
 
while(rdlen < totlen)
{
len = fin.Read(bin, 0, 100);
encStream.Write(bin, 0, len);
rdlen = rdlen + len;
Console.WriteLine("{0} bytes processed", rdlen);
} encStream.Close();  
fout.Close();
fin.Close();
}
public void DESDeWriter(String inName, String outName)
{

FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
fout.SetLength(0);
    
byte[] bin = new byte[100];
long rdlen = 0; 
long totlen = fin.Length;   
int len;      
        
CryptoStream encStream = new CryptoStream(fout, des.CreateDecryptor(this.thisKey,this.thisIV), CryptoStreamMode.Write);
this.thisKey=des.Key;
this.thisIV=des.IV;
                
Console.WriteLine("Decrypting...");
 
while(rdlen < totlen)
{
len = fin.Read(bin, 0, 100);
encStream.Write(bin, 0, len);
rdlen = rdlen + len;
Console.WriteLine("{0} bytes processed", rdlen);
} encStream.Close();  
fout.Close();
fin.Close();
}public void MyDESWriter(String inName, String outName,byte[] desKey,byte[] desIV)
{
FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
fout.SetLength(0);
       
         byte[] bin = new byte[100]; 
long rdlen = 0; 
long totlen = fin.Length;
int len;   
         
CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);
                
Console.WriteLine("Encrypting...");
 
while(rdlen < totlen)
{
len = fin.Read(bin, 0, 100);
encStream.Write(bin, 0, len);
rdlen = rdlen + len;
Console.WriteLine("{0} bytes processed", rdlen);
}
 
encStream.Close();  
fout.Close();
fin.Close();
}
public void MyDESWriter(String inName, String outName,byte[] desKey,byte[] desIV)
{
FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
fout.SetLength(0);
       
byte[] bin = new byte[100]; 
long rdlen = 0;              
long totlen = fin.Length;    
int len; 
         
CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);
                
Console.WriteLine("Encrypting...");
 
//Read from the input file, then encrypt and write to the output file.
while(rdlen < totlen)
{
len = fin.Read(bin, 0, 100);
encStream.Write(bin, 0, len);
rdlen = rdlen + len;
Console.WriteLine("{0} bytes processed", rdlen);
}
 
encStream.Close();  
fout.Close();
fin.Close();
}

解决方案 »

  1.   

    ms-help://MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemSecurityCryptographyDESClassTopic.htm
      

  2.   

    再顶一下,还不是很懂,我第一次接触到加密这玩意。我现在加密的key必须要用24位byte,谁能把我上面的程序该动一下啊??
      

  3.   

    异常详细信息: System.Security.Cryptography.CryptographicException: 指定键的大小对于此算法无效。
    表明是Key的大小有误,你看看是不是刚好那么多位??我以前写一个8位的加密,写多了一个,就有这种错!!!
      

  4.   

    我的key的是24位,但对于那段程序,报错?
    我的意思是怎么让那段程序接受我的24位的key。??