我试图解密之前用C#TripleDESCryptoServiceProvider加密的非托管C++中的文件。不幸的是,我不知道如何使用Microsoft Crypt API(advapi32.lib)来做到这一点。下面是我用来加密数据的C#代码:在C++中使用用Crypt API加密的C++中的TripleDES解密文件
private static void EncryptData(MemoryStream streamToEncrypt)
{
// initialize the encryption algorithm
TripleDES algorithm = new TripleDESCryptoServiceProvider();
byte[] desIV = new byte[8];
byte[] desKey = new byte[16];
for (int i = 0; i < 8; ++i)
{
desIV[i] = (byte)i;
}
for (int j = 0; j < 16; ++j)
{
desKey[j] = (byte)j;
}
FileStream outputStream = new FileStream(TheCryptedSettingsFilePath, FileMode.OpenOrCreate, FileAccess.Write);
outputStream.SetLength(0);
CryptoStream encStream = new CryptoStream(outputStream, algorithm.CreateEncryptor(desKey, desIV),
CryptoStreamMode.Write);
// write the encrypted data to the file
encStream.Write(streamToEncrypt.ToArray(), 0, (int)streamToEncrypt.Length);
encStream.Close();
outputStream.Close();
}
正如你所看到的密钥和IV是相当简单的(只是用于测试目的)。所以我的问题是,如何在C++中解密该文件?我知道TripleDESCryptoServiceProvider只是Crypt API的包装器,所以解决这个问题不是那么困难。
有没有人做过这样的事情,可以帮助我?
Thx Simon
你可以使用C++ w/.net运行时? (我敢打赌不,你很可能使用C++,所以你不需要在你的解密应用程序上安装.net) – 2010-01-29 21:16:46