G
Guest
Hi,
I am using the CryptDecrypt function 3 times in a row. the result of the
first i use as input on the 3 CryptDecrypt as follows:
// Result1 decrypte
byte[] m_abResult1 = Crypto.Decrypt(m_strInnerKey, abEncResult1);
// Result2 decrypte
byte[] m_abResult1 = Crypto.Decrypt(m_strInnerKey, abEncResult2);
// Result1 decrypte
byte[] m_abResult3 = Crypto.Decrypt(m_strInnerKey2, m_abResult1);
The Function Called:
static public byte[] Decrypt(string passphrase, byte[] data)
{
// make a copy of the encrypted data
byte[] dataCopy = data.Clone() as byte[];
// holds the decrypted data
byte[] buffer = null;
// crypto handles
IntPtr hProv = IntPtr.Zero;
IntPtr hKey = IntPtr.Zero;
try
{
// get crypto provider, specify the provider (3rd argument)
// instead of using default to ensure the same provider is
// used on client and server
if (!WinApi.CryptAcquireContext(ref hProv, null, WinApi.MS_DEF_PROV,
WinApi.PROV_RSA_FULL, WinApi.CRYPT_VERIFYCONTEXT))
Failed("CryptAcquireContext");
// generate encryption key from the passphrase
hKey = GetCryptoKey(hProv, passphrase);
// decrypt the data
uint dataLength = (uint)dataCopy.Length;
if (!WinApi.CryptDecrypt(hKey, IntPtr.Zero, 1, 0, dataCopy, ref dataLength))
Failed("CryptDecrypt");
// copy to a buffer that is returned to the caller
// the decrypted data size might be less then
// the encrypted size
buffer = new byte[dataLength];
Buffer.BlockCopy(dataCopy, 0, buffer, 0, (int)dataLength);
}
finally
{
// release crypto handles
if (hKey != IntPtr.Zero)
WinApi.CryptDestroyKey(hKey);
if (hProv != IntPtr.Zero)
WinApi.CryptReleaseContext(hProv, 0);
}
return buffer;
}
My problem is that what ever i try it crashes with a pointer error @ this
point:
if (!WinApi.CryptDecrypt(hKey, IntPtr.Zero, 1, 0, dataCopy, ref
dataLength))
This same order works with the normal framework as well as in a eVC version.
Can anyone help?
Kind Regards,
Steffan Wullems
I am using the CryptDecrypt function 3 times in a row. the result of the
first i use as input on the 3 CryptDecrypt as follows:
// Result1 decrypte
byte[] m_abResult1 = Crypto.Decrypt(m_strInnerKey, abEncResult1);
// Result2 decrypte
byte[] m_abResult1 = Crypto.Decrypt(m_strInnerKey, abEncResult2);
// Result1 decrypte
byte[] m_abResult3 = Crypto.Decrypt(m_strInnerKey2, m_abResult1);
The Function Called:
static public byte[] Decrypt(string passphrase, byte[] data)
{
// make a copy of the encrypted data
byte[] dataCopy = data.Clone() as byte[];
// holds the decrypted data
byte[] buffer = null;
// crypto handles
IntPtr hProv = IntPtr.Zero;
IntPtr hKey = IntPtr.Zero;
try
{
// get crypto provider, specify the provider (3rd argument)
// instead of using default to ensure the same provider is
// used on client and server
if (!WinApi.CryptAcquireContext(ref hProv, null, WinApi.MS_DEF_PROV,
WinApi.PROV_RSA_FULL, WinApi.CRYPT_VERIFYCONTEXT))
Failed("CryptAcquireContext");
// generate encryption key from the passphrase
hKey = GetCryptoKey(hProv, passphrase);
// decrypt the data
uint dataLength = (uint)dataCopy.Length;
if (!WinApi.CryptDecrypt(hKey, IntPtr.Zero, 1, 0, dataCopy, ref dataLength))
Failed("CryptDecrypt");
// copy to a buffer that is returned to the caller
// the decrypted data size might be less then
// the encrypted size
buffer = new byte[dataLength];
Buffer.BlockCopy(dataCopy, 0, buffer, 0, (int)dataLength);
}
finally
{
// release crypto handles
if (hKey != IntPtr.Zero)
WinApi.CryptDestroyKey(hKey);
if (hProv != IntPtr.Zero)
WinApi.CryptReleaseContext(hProv, 0);
}
return buffer;
}
My problem is that what ever i try it crashes with a pointer error @ this
point:
if (!WinApi.CryptDecrypt(hKey, IntPtr.Zero, 1, 0, dataCopy, ref
dataLength))
This same order works with the normal framework as well as in a eVC version.
Can anyone help?
Kind Regards,
Steffan Wullems