voici plutot le code :
using namespace System;
using namespace System::IO;
using namespace System::Security::Cryptography;
void genererCle(String ^fichierPublicPrivee, String ^fichierClePublic)
{
if (!(File::Exists(fichierPublicPrivee) || File::Exists(fichierClePublic)) )
{
RSACryptoServiceProvider ^rsaProvider = gcnew RSACryptoServiceProvider(1024);
String ^clesPublicEtPrivee = rsaProvider->ToXmlString(true);
String ^clePublic = rsaProvider->ToXmlString(false);
StreamWriter ^sw = gcnew StreamWriter(fichierPublicPrivee);
sw->Write(clesPublicEtPrivee);
sw->Close();
sw = gcnew StreamWriter(fichierClePublic);
sw->Write(clePublic);
sw->Close();
}
else
Console::WriteLine("fichier de clés existant");
}
array<unsigned char> ^ encrypt(String ^fichierClePublic, array<unsigned char> ^data)
{
StreamReader ^sr = gcnew StreamReader(fichierClePublic);
String ^cle = sr->ReadLine();
sr->Close();
RSACryptoServiceProvider ^rsaProvider = gcnew RSACryptoServiceProvider(1024);
rsaProvider->FromXmlString(cle);
return rsaProvider->Encrypt(data, false);
}
array<unsigned char> ^ decrypt(String ^fichierPublicPrivee, array<unsigned char> ^data)
{
StreamReader ^sr = gcnew StreamReader(fichierPublicPrivee);
String ^cle = sr->ReadLine();
sr->Close();
RSACryptoServiceProvider ^rsaProvider = gcnew RSACryptoServiceProvider(1024);
rsaProvider->FromXmlString(cle);
return rsaProvider->Decrypt(data, false);
}
int main(array<System::String ^> ^args)
{
genererCle("pp", "p");
FileStream ^fs = gcnew FileStream("c:\\test.txt", FileMode::Open);
BinaryReader ^br = gcnew BinaryReader(fs);
FileStream ^fsw = gcnew FileStream("c:\\test1.txt", FileMode::CreateNew);
BinaryWriter ^bw = gcnew BinaryWriter(fsw);
try
{
array<unsignedchar> ^ encrypted = encrypt("c:\\testpke.txt", br->ReadBytes((int)fs->Length));
bw->Write(encrypt("pp", br->ReadBytes((int)fs->Length)));
MessageBox::Show(encrypted->ToString());
}
catch (Exception^)
{
}
finally
{
br->Close();
fs->Close();
bw->Close();
fsw->Close();
}
return 0;
}