【发布时间】:2013-08-22 15:41:50
【问题描述】:
请看下面的代码
void InformationWriter::writeContacts(System::String ^phone, System::String ^email)
{
try
{
//Write the file
StreamWriter ^originalTextWriter = gcnew StreamWriter("contacts.dat",false);
originalTextWriter->WriteLine(phone);
originalTextWriter->WriteLine(email);
originalTextWriter->Close();
//Encrypt the file
FileStream ^fileWriter = gcnew FileStream("contacts.dat",FileMode::OpenOrCreate,FileAccess::Write);
DESCryptoServiceProvider ^crypto = gcnew DESCryptoServiceProvider();
crypto->Key = ASCIIEncoding::ASCII->GetBytes("Intru235");
crypto->IV = ASCIIEncoding::ASCII->GetBytes("Intru235");
CryptoStream ^cStream = gcnew CryptoStream(fileWriter,crypto->CreateEncryptor(),CryptoStreamMode::Write);
//array<System::Byte>^ phoneBytes = ASCIIEncoding::ASCII->GetBytes(phone);
FileStream ^input = gcnew FileStream("contacts.dat",FileMode::Open); //Open the file to be encrypted
int data = 0;
while((data=input->ReadByte()!=-1))
{
cStream->WriteByte((System::Byte)data);
}
input->Close();
cStream->Close();
fileWriter->Close();
System::Windows::Forms::MessageBox::Show("Data Saved");
}
catch (IOException ^e)
{
System::Windows::Forms::MessageBox::Show(e->Message);
}
}
当下面的部分被执行时,我得到一个错误
FileStream ^input = gcnew FileStream("contacts.dat",FileMode::Open); //Open the file to be encrypted
以下是我得到的错误
这是我第一次使用CryptoStream,我也是 C++/CLI 的新手。
【问题讨论】:
-
您的代码存在根本缺陷,它不是异常安全的。谷歌“c++/cli stack semantics”学习如何正确编写。
-
@HansPassant:非常感谢您指出问题。我会检查出来:)
-
请注意,DES 太弱了。 ASCII 键使它更弱。使用密钥作为 IV 也是非常错误的,使用静态 IV 也是如此。
标签: .net visual-studio-2010 io cryptography c++-cli