我使用下面的代码加密和解密一个文件:
//加密
UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes("password");
FileStream fsCrypt = new FileStream("cryptFile", FileMode,create);
RijndaelManaged RMCrypto = new RijndaelManaged();
CryptoStream cs = new CryptoStream(fsCrypt,
RMCrypto.CreateEncryptor(key, key),
CryptoStreamMode.Write);
FileStream fsIn = new FileStream("FileName", FileMode.Open);
int data;
while ((data = fsIn.ReadByte()) != -1)
cs.WriteByte((byte)data);
fsIn.Close();
cs.Close();
fsCrypt.Close();//解密
UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes("password");
FileStream fsCrypt = new FileStream("filename", FileMode.Open);
RijndaelManaged RMCrypto = new RijndaelManaged();
CryptoStream cs = new CryptoStream(fsCrypt,
RMCrypto.CreateDecryptor(key, key),
CryptoStreamMode.Read);
int data;
while ((data = cs.ReadByte()) != -1)
memorystream.WriteByte((byte)data);它运行良好,没有任何问题!
出于某些原因,我在第一个加密文件中添加了10个字节!实际上,我已经创建了一个10字节的文件(文件大小正好是10字节),然后我将加密的文件追加到这个文件中。
请注意,10字节文件没有加密,而是使用简单的filestream创建的,可以在记事本中读取。
现在,在解密代码中,我如何消除前10个字节并解密文件中的数据?
我尝试调用ReadByte() 10次,然后转到WHILE部件和解密文件,但它不工作,我得到长度无效的异常。
提前谢谢。
发布于 2015-02-17 12:09:47
发表我的评论,作为回应的要求。
你说
我尝试调用ReadByte() 10次,然后转到WHILE部件和解密文件,但它不工作,我得到长度无效的异常。
但是,您没有具体说明在哪个流上10次调用ReadByte(),以及何时调用它。
在实例化新的fsCrypt之前,一定要在CryptoStream上调用它。
还请注意,您可能只需调用fsCrypt.Position = 10;或fsCrypt.Seek(10, SeekOrigin.Begin),而不是读取10个虚拟字节,因为FileStream支持查找。
例如:
byte[] key = Encoding.Unicode.GetBytes("password");
FileStream fsCrypt = File.OpenRead("filename");
fsCrypt.Position = 10; // Skip the 10 useless bytes at the start
RijndaelManaged rijndaelManaged = new RijndaelManaged();
// Disposing CryptoStream will also dispose the FileStream passed to it
using (CryptoStream cryptoStream = new CryptoStream(fsCrypt, rijndaelManaged.CreateDecryptor(key, key), CryptoStreamMode.Read))
{
cryptoStream.CopyTo(memoryStream);
}顺便提一句:不使用密钥作为IV!
每次加密时,IV都需要不同,但可以是公开的。一种常见的技术是在每次要加密某物时随机生成一个IV,并将其作为加密流的第一个N字节。当涉及解密时,自己读取加密流的前N个字节(在创建CryptoStream之前),将其设置为IV,打开CryptoStream,然后读取其余的。
https://stackoverflow.com/questions/28433248
复制相似问题