我的源程序如下,但是总是输出不料结果
#define _WIN32_WINNT 0x0400
#include<windows.h>
#include<iostream.h>
#include <vector>
#include <string>
#include"blue1.h"
#include"resource.h"//using namespace stdtypedef DWORD (*TDeCode) (DWORD);
TDeCode DeCodes;typedef DWORD (*pFreeBuf) (DWORD);
pFreeBuf pFreeBuf1;typedef BYTE* (*TEnCode)(DWORD,DWORD);
TEnCode EnCodes;typedef DWORD (*TCheckSum) (DWORD,BYTE*,DWORD);
TCheckSum CheckSums;typedef BYTE* (*THash_Proc) (DWORD,DWORD);
THash_Proc Hash_Proc;BYTE *BufForRecv;
BYTE ExportKeyBlog[0x4c];HINSTANCE hLib;
HCRYPTPROV hCryptProv1;
HCRYPTPROV hCryptProv2;
HCRYPTKEY hGenKey1;
HCRYPTKEY hGenKey2;
HCRYPTKEY hImportKey1;
HCRYPTKEY hImportKey2;
HCRYPTKEY hImportKey3;
HCRYPTKEY hXchgKey;
DWORD dwKeyBlobLen;BYTE KeyBlog1[] = {
0x06,0x02,0x00,0x00,0x00,0x24,0x00,0x00,0x52,0x53,0x41,0x31,0x00,0x04,0x00,0x00,
0x01,0x00,0x01,0x00,0xB5,0xF5,0x67,0xC5,0xF1,0x3C,0xDB,0x8C,0xBC,0xE7,0x91,0x75,
0xEB,0x40,0x6B,0xB7,0xDE,0xC7,0x4C,0x8F,0xB5,0x1F,0x9D,0x69,0x77,0x61,0x88,0xF1,
0xE9,0xCF,0xAC,0x40,0x07,0x1A,0x37,0xCD,0x9C,0xCD,0x0C,0xC9,0x96,0x1E,0x3C,0xB6,
0x60,0x18,0x5E,0x23,0x07,0xF0,0x08,0xBB,0x0C,0xFF,0x58,0x39,0xEC,0x7B,0x4F,0xAD,
0xDD,0x75,0xB5,0xCB,0xFA,0x95,0x60,0x2F,0x42,0xE3,0x69,0xBD,0xD3,0x4E,0xA5,0x62,
0x87,0x3E,0x32,0x21,0x43,0xA3,0xCC,0xFE,0xFF,0x1C,0xA6,0x91,0x45,0x99,0x51,0x23,
0xD7,0x8F,0xF6,0x3D,0x80,0xDA,0xF1,0xCC,0xC5,0x32,0x0A,0xD8,0xA3,0x1D,0xAA,0xF8,
0x09,0x8E,0xA5,0x88,0xA5,0x34,0x1B,0x1E,0x97,0x12,0xCF,0x98,0x1E,0xBC,0x9C,0xBA,
0x8E,0x3C,0xFD,0xE1
};BYTE KeyBlog2[] = {
0x01,0x02,0x00,0x00,0x01,0x68,0x00,0x00,0x00,0xA4,0x00,0x00,0x76,0x60,0xBC,0xDA,
0x9D,0x20,0x2E,0xF7,0xCB,0xC3,0xBD,0x5D,0x30,0x62,0x82,0xEC,0x00,0xDE,0xAC,0xAF,
0x67,0xBD,0xC9,0x9A,0x64,0x02,0x45,0x98,0x19,0xE6,0xD0,0x57,0x76,0xF0,0x0A,0xF2,
0x23,0xCC,0x1B,0x77,0x61,0xFA,0x2A,0x27,0x6C,0x3E,0xD1,0x81,0x07,0xF3,0xBF,0x9A,
0x93,0xC1,0x23,0xE9,0xD9,0xA8,0xE2,0x0E,0x96,0x14,0x3A,0x32,0xB1,0x88,0xDD,0xEF,
0xCA,0xF3,0x84,0xE4,0x44,0x13,0x97,0xF0,0x84,0x17,0x28,0xBF,0x6D,0xCE,0x1A,0x7A,
0x07,0x5F,0x12,0x55,0xE3,0x1B,0x32,0x54,0xF7,0xFF,0x20,0x37,0x5B,0x56,0xD0,0x40,
0x25,0xFE,0x81,0xFF,0x48,0x0F,0x8B,0x2B,0xD6,0x05,0x0A,0x2E,0xC8,0xDB,0xDB,0xF4,
0x76,0x1F,0xCE,0xDA,0xA7,0xB7,0x4F,0xBA,0x0E,0x37,0x02,0x00,0x32,0x30,0x30,0x36,
0x2E,0x30,0x34,0x2E,0x32,0x31,0x20,0x31,0x32,0x3A,0x35,0x36,0x3A,0x35,0x34,0x00
};BYTE KeyBlog3[] = {
0x06,0x02,0x00,0x00,0x00,0xA4,0x00,0x00,0x52,0x53,0x41,0x31,0x00,0x02,0x00,0x00,
0x01,0x00,0x01,0x00,0x47,0x6D,0x2E,0xA4,0xDA,0x37,0xEB,0xD5,0x35,0xC4,0xFB,0x68,
0x48,0x64,0x3F,0x58,0x4A,0xCA,0x5E,0xAE,0x53,0x48,0xA2,0xB9,0xB3,0xD1,0x4A,0x64,
0x4A,0x34,0x03,0x12,0x94,0xD2,0xF7,0x9A,0x8E,0x8D,0xAB,0x4A,0xFD,0x8F,0xC5,0x47,
0xE7,0xA7,0xDE,0x46,0xF9,0x04,0x01,0x9D,0xAD,0x50,0x27,0x11,0xB7,0xCF,0xF3,0x0E,
0xAA,0x7F,0x78,0xAB
};void asmChangeKeyBlog(BYTE* pKeyBlog);
void initAndCreate();
void DecryptPacks();
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
DialogBoxParam(hInstance,MAKEINTRESOURCE(ABOX),NULL,AboutDlgProc,NULL);
return 0;}BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam)
{
static int cxChar, cxCaps, cyChar, NUMLINES;
static HWND hCtrlBlock ;
BufForRecv = new BYTE[0x10000];
memset(BufForRecv, 0, 0x10000);
HDC hdc;
TEXTMETRIC tm ;
// TCHAR* OUTsz[20];
int i; switch (message)
{
case WM_INITDIALOG :
initAndCreate();
hCtrlBlock = GetDlgItem (hDlg, IDC_OUT) ;//该函数用于获取对话框中指定控件的窗口句柄。 return TRUE ;
case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDC_UseName:
GetDlgItemText(hDlg,IDC_UseName,(char *) BufForRecv,20);
return 0 ; case IDC_OUT:
hdc = GetDC (hDlg) ;
GetTextMetrics (hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2 ;
cyChar = tm.tmHeight + tm.tmExternalLeading ;
for (i = 0 ; i <20 ; i++)
TextOut (hdc, 1, cyChar *i, ( TCHAR *)BufForRecv[i],sizeof (BufForRecv[i]) );
ReleaseDC (hDlg, hdc) ;
case IDOK :
DecryptPacks();
SendMessage(hDlg,IDC_OUT,0,0);
return 0; case IDCANCEL :
delete[] BufForRecv;
BufForRecv = NULL;
EndDialog (hDlg, 0) ;
return TRUE ;
}
break ;
}
return FALSE ;
}
void initAndCreate()
{
BYTE* pTemp;
hLib = LoadLibrary("blue1.dll");
DeCodes = (TDeCode)GetProcAddress( hLib,"DeCode" );
pFreeBuf1 = (pFreeBuf)GetProcAddress( hLib,"FreeBuf" );
EnCodes = (TEnCode)GetProcAddress( hLib,"EnCode" );
CheckSums= (TCheckSum)GetProcAddress( hLib,"CheckSum" );
CryptAcquireContext(&hCryptProv1,NULL,"Microsoft Enhanced Cryptographic Provider v1.0",PROV_RSA_FULL,0xF0000000);
CryptImportKey(hCryptProv1, &KeyBlog1[0], 0x94, 0, 0, &hImportKey1);//导入
CryptGenKey(hCryptProv1,//CSP句柄
AT_KEYEXCHANGE,//创建的密钥对类型为signature key pair
CRYPT_EXPORTABLE,//key类型,这里用默认值
&hGenKey1) ;//创建成功返回新创建的密钥对的句柄
//// 创建随机块加密会话密钥. CryptExportKey(hGenKey1,//需要被导出的密钥句柄
0,//传入的密钥就是用来加密被导出的密钥的。也就是说,被导出的密钥hKey的数据是经过这个密钥
PRIVATEKEYBLOB,//被导出的密钥类型
0,//标志位
0,//保存导出的数据
&dwKeyBlobLen);//输入pbData缓冲区的大小,输出导出数据的长度
//// 获取默认密钥blob大小, 并分配内存
pTemp = new BYTE [ dwKeyBlobLen ] ;
CryptExportKey(hGenKey1,0,PRIVATEKEYBLOB,0,pTemp,&dwKeyBlobLen);
// 获取默认密钥blob大小, 并分配内存
CryptDestroyKey(hGenKey1);//// 销毁密钥交换密钥
asmChangeKeyBlog(pTemp); CryptImportKey(hCryptProv1,pTemp,dwKeyBlobLen,0,0,&hImportKey2);////导入
delete [] pTemp;
CryptImportKey(hCryptProv1,&KeyBlog2[0],0x8c,hImportKey2,0,&hImportKey3);////导入 if( !CryptAcquireContext(&hCryptProv2,NULL,"Microsoft Enhanced Cryptographic Provider v1.0",PROV_RSA_FULL,0xF0000040) )
MessageBox(NULL,"CryptProv Error",NULL,MB_OK);////创建一个指定名称的钥容器,接着再创建一个签名密钥对,
CryptImportKey(hCryptProv2, &KeyBlog3[0], 0x54, 0, 0, &hXchgKey); if( !CryptGenKey(hCryptProv2,CALG_3DES,0x00C00001,&hGenKey2) ) //// 创建随机块加密会话密钥
MessageBox(NULL,"Cant gen key",NULL,MB_OK);
CryptExportKey(hGenKey2, hXchgKey, SIMPLEBLOB, 0, NULL, &dwKeyBlobLen);
CryptExportKey(hGenKey2, hXchgKey, SIMPLEBLOB, 0, &ExportKeyBlog[0], &dwKeyBlobLen);
}void asmChangeKeyBlog(BYTE* pKeyBlog)
{
DWORD varEDX = *(DWORD*)pKeyBlog;
BYTE* pTempECX = pKeyBlog+0x10;
DWORD ieax = 0;
do
{
if(ieax)
*(pTempECX+ieax) = 0;
else
*pTempECX = 1;
ieax++;
}
while (ieax<4);
ieax = varEDX;
DWORD iesi = varEDX;
ieax = ieax/16;
iesi = ieax/8;
varEDX = iesi + ieax*2 + 4;
pTempECX += varEDX;
varEDX = 0;
if(ieax>0)
{
do
{
if(varEDX)
*(pTempECX+varEDX) = 0;
else
*pTempECX = 1;
varEDX++;
}
while (varEDX < ieax);
}
pTempECX += ieax;
varEDX = 0;
if(ieax>0)
{
do
{
if(varEDX)
*(pTempECX+varEDX) = 0;
else
*pTempECX = 1;
varEDX++;
}
while (varEDX < ieax);
}
pTempECX = pTempECX + ieax*2;
ieax = 0;
if(iesi>0)
{
do
{
if(ieax)
*(pTempECX+ieax) = 0;
else
*pTempECX = 0;
ieax ++;
}
while (ieax<iesi);
}
}
void DecryptPacks()
{
BYTE* p1;
BYTE* p2;
DWORD dwDecryptLen;
p1 = &BufForRecv[0];
p2 = new BYTE [ *(DWORD*)p1 ];
dwDecryptLen = *(DWORD*)p1;
CopyMemory(p2,p1+4,dwDecryptLen);
ZeroMemory(p1,dwDecryptLen+4);
CryptDecrypt(hGenKey2,//密鈅句柄
0,//一个可选的散列对象
1,//一个布尔值,此值在最后一块数据块之前保持为FALSE,
0,//标志值
p2,//解密数据的指针
&dwDecryptLen);//缓冲区中待加密字符的数量
CopyMemory(p1,p2,dwDecryptLen);
BufForRecv = p1;
delete [] p2;
}
#define _WIN32_WINNT 0x0400
#include<windows.h>
#include<iostream.h>
#include <vector>
#include <string>
#include"blue1.h"
#include"resource.h"//using namespace stdtypedef DWORD (*TDeCode) (DWORD);
TDeCode DeCodes;typedef DWORD (*pFreeBuf) (DWORD);
pFreeBuf pFreeBuf1;typedef BYTE* (*TEnCode)(DWORD,DWORD);
TEnCode EnCodes;typedef DWORD (*TCheckSum) (DWORD,BYTE*,DWORD);
TCheckSum CheckSums;typedef BYTE* (*THash_Proc) (DWORD,DWORD);
THash_Proc Hash_Proc;BYTE *BufForRecv;
BYTE ExportKeyBlog[0x4c];HINSTANCE hLib;
HCRYPTPROV hCryptProv1;
HCRYPTPROV hCryptProv2;
HCRYPTKEY hGenKey1;
HCRYPTKEY hGenKey2;
HCRYPTKEY hImportKey1;
HCRYPTKEY hImportKey2;
HCRYPTKEY hImportKey3;
HCRYPTKEY hXchgKey;
DWORD dwKeyBlobLen;BYTE KeyBlog1[] = {
0x06,0x02,0x00,0x00,0x00,0x24,0x00,0x00,0x52,0x53,0x41,0x31,0x00,0x04,0x00,0x00,
0x01,0x00,0x01,0x00,0xB5,0xF5,0x67,0xC5,0xF1,0x3C,0xDB,0x8C,0xBC,0xE7,0x91,0x75,
0xEB,0x40,0x6B,0xB7,0xDE,0xC7,0x4C,0x8F,0xB5,0x1F,0x9D,0x69,0x77,0x61,0x88,0xF1,
0xE9,0xCF,0xAC,0x40,0x07,0x1A,0x37,0xCD,0x9C,0xCD,0x0C,0xC9,0x96,0x1E,0x3C,0xB6,
0x60,0x18,0x5E,0x23,0x07,0xF0,0x08,0xBB,0x0C,0xFF,0x58,0x39,0xEC,0x7B,0x4F,0xAD,
0xDD,0x75,0xB5,0xCB,0xFA,0x95,0x60,0x2F,0x42,0xE3,0x69,0xBD,0xD3,0x4E,0xA5,0x62,
0x87,0x3E,0x32,0x21,0x43,0xA3,0xCC,0xFE,0xFF,0x1C,0xA6,0x91,0x45,0x99,0x51,0x23,
0xD7,0x8F,0xF6,0x3D,0x80,0xDA,0xF1,0xCC,0xC5,0x32,0x0A,0xD8,0xA3,0x1D,0xAA,0xF8,
0x09,0x8E,0xA5,0x88,0xA5,0x34,0x1B,0x1E,0x97,0x12,0xCF,0x98,0x1E,0xBC,0x9C,0xBA,
0x8E,0x3C,0xFD,0xE1
};BYTE KeyBlog2[] = {
0x01,0x02,0x00,0x00,0x01,0x68,0x00,0x00,0x00,0xA4,0x00,0x00,0x76,0x60,0xBC,0xDA,
0x9D,0x20,0x2E,0xF7,0xCB,0xC3,0xBD,0x5D,0x30,0x62,0x82,0xEC,0x00,0xDE,0xAC,0xAF,
0x67,0xBD,0xC9,0x9A,0x64,0x02,0x45,0x98,0x19,0xE6,0xD0,0x57,0x76,0xF0,0x0A,0xF2,
0x23,0xCC,0x1B,0x77,0x61,0xFA,0x2A,0x27,0x6C,0x3E,0xD1,0x81,0x07,0xF3,0xBF,0x9A,
0x93,0xC1,0x23,0xE9,0xD9,0xA8,0xE2,0x0E,0x96,0x14,0x3A,0x32,0xB1,0x88,0xDD,0xEF,
0xCA,0xF3,0x84,0xE4,0x44,0x13,0x97,0xF0,0x84,0x17,0x28,0xBF,0x6D,0xCE,0x1A,0x7A,
0x07,0x5F,0x12,0x55,0xE3,0x1B,0x32,0x54,0xF7,0xFF,0x20,0x37,0x5B,0x56,0xD0,0x40,
0x25,0xFE,0x81,0xFF,0x48,0x0F,0x8B,0x2B,0xD6,0x05,0x0A,0x2E,0xC8,0xDB,0xDB,0xF4,
0x76,0x1F,0xCE,0xDA,0xA7,0xB7,0x4F,0xBA,0x0E,0x37,0x02,0x00,0x32,0x30,0x30,0x36,
0x2E,0x30,0x34,0x2E,0x32,0x31,0x20,0x31,0x32,0x3A,0x35,0x36,0x3A,0x35,0x34,0x00
};BYTE KeyBlog3[] = {
0x06,0x02,0x00,0x00,0x00,0xA4,0x00,0x00,0x52,0x53,0x41,0x31,0x00,0x02,0x00,0x00,
0x01,0x00,0x01,0x00,0x47,0x6D,0x2E,0xA4,0xDA,0x37,0xEB,0xD5,0x35,0xC4,0xFB,0x68,
0x48,0x64,0x3F,0x58,0x4A,0xCA,0x5E,0xAE,0x53,0x48,0xA2,0xB9,0xB3,0xD1,0x4A,0x64,
0x4A,0x34,0x03,0x12,0x94,0xD2,0xF7,0x9A,0x8E,0x8D,0xAB,0x4A,0xFD,0x8F,0xC5,0x47,
0xE7,0xA7,0xDE,0x46,0xF9,0x04,0x01,0x9D,0xAD,0x50,0x27,0x11,0xB7,0xCF,0xF3,0x0E,
0xAA,0x7F,0x78,0xAB
};void asmChangeKeyBlog(BYTE* pKeyBlog);
void initAndCreate();
void DecryptPacks();
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
DialogBoxParam(hInstance,MAKEINTRESOURCE(ABOX),NULL,AboutDlgProc,NULL);
return 0;}BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam)
{
static int cxChar, cxCaps, cyChar, NUMLINES;
static HWND hCtrlBlock ;
BufForRecv = new BYTE[0x10000];
memset(BufForRecv, 0, 0x10000);
HDC hdc;
TEXTMETRIC tm ;
// TCHAR* OUTsz[20];
int i; switch (message)
{
case WM_INITDIALOG :
initAndCreate();
hCtrlBlock = GetDlgItem (hDlg, IDC_OUT) ;//该函数用于获取对话框中指定控件的窗口句柄。 return TRUE ;
case WM_COMMAND :
switch (LOWORD (wParam))
{
case IDC_UseName:
GetDlgItemText(hDlg,IDC_UseName,(char *) BufForRecv,20);
return 0 ; case IDC_OUT:
hdc = GetDC (hDlg) ;
GetTextMetrics (hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2 ;
cyChar = tm.tmHeight + tm.tmExternalLeading ;
for (i = 0 ; i <20 ; i++)
TextOut (hdc, 1, cyChar *i, ( TCHAR *)BufForRecv[i],sizeof (BufForRecv[i]) );
ReleaseDC (hDlg, hdc) ;
case IDOK :
DecryptPacks();
SendMessage(hDlg,IDC_OUT,0,0);
return 0; case IDCANCEL :
delete[] BufForRecv;
BufForRecv = NULL;
EndDialog (hDlg, 0) ;
return TRUE ;
}
break ;
}
return FALSE ;
}
void initAndCreate()
{
BYTE* pTemp;
hLib = LoadLibrary("blue1.dll");
DeCodes = (TDeCode)GetProcAddress( hLib,"DeCode" );
pFreeBuf1 = (pFreeBuf)GetProcAddress( hLib,"FreeBuf" );
EnCodes = (TEnCode)GetProcAddress( hLib,"EnCode" );
CheckSums= (TCheckSum)GetProcAddress( hLib,"CheckSum" );
CryptAcquireContext(&hCryptProv1,NULL,"Microsoft Enhanced Cryptographic Provider v1.0",PROV_RSA_FULL,0xF0000000);
CryptImportKey(hCryptProv1, &KeyBlog1[0], 0x94, 0, 0, &hImportKey1);//导入
CryptGenKey(hCryptProv1,//CSP句柄
AT_KEYEXCHANGE,//创建的密钥对类型为signature key pair
CRYPT_EXPORTABLE,//key类型,这里用默认值
&hGenKey1) ;//创建成功返回新创建的密钥对的句柄
//// 创建随机块加密会话密钥. CryptExportKey(hGenKey1,//需要被导出的密钥句柄
0,//传入的密钥就是用来加密被导出的密钥的。也就是说,被导出的密钥hKey的数据是经过这个密钥
PRIVATEKEYBLOB,//被导出的密钥类型
0,//标志位
0,//保存导出的数据
&dwKeyBlobLen);//输入pbData缓冲区的大小,输出导出数据的长度
//// 获取默认密钥blob大小, 并分配内存
pTemp = new BYTE [ dwKeyBlobLen ] ;
CryptExportKey(hGenKey1,0,PRIVATEKEYBLOB,0,pTemp,&dwKeyBlobLen);
// 获取默认密钥blob大小, 并分配内存
CryptDestroyKey(hGenKey1);//// 销毁密钥交换密钥
asmChangeKeyBlog(pTemp); CryptImportKey(hCryptProv1,pTemp,dwKeyBlobLen,0,0,&hImportKey2);////导入
delete [] pTemp;
CryptImportKey(hCryptProv1,&KeyBlog2[0],0x8c,hImportKey2,0,&hImportKey3);////导入 if( !CryptAcquireContext(&hCryptProv2,NULL,"Microsoft Enhanced Cryptographic Provider v1.0",PROV_RSA_FULL,0xF0000040) )
MessageBox(NULL,"CryptProv Error",NULL,MB_OK);////创建一个指定名称的钥容器,接着再创建一个签名密钥对,
CryptImportKey(hCryptProv2, &KeyBlog3[0], 0x54, 0, 0, &hXchgKey); if( !CryptGenKey(hCryptProv2,CALG_3DES,0x00C00001,&hGenKey2) ) //// 创建随机块加密会话密钥
MessageBox(NULL,"Cant gen key",NULL,MB_OK);
CryptExportKey(hGenKey2, hXchgKey, SIMPLEBLOB, 0, NULL, &dwKeyBlobLen);
CryptExportKey(hGenKey2, hXchgKey, SIMPLEBLOB, 0, &ExportKeyBlog[0], &dwKeyBlobLen);
}void asmChangeKeyBlog(BYTE* pKeyBlog)
{
DWORD varEDX = *(DWORD*)pKeyBlog;
BYTE* pTempECX = pKeyBlog+0x10;
DWORD ieax = 0;
do
{
if(ieax)
*(pTempECX+ieax) = 0;
else
*pTempECX = 1;
ieax++;
}
while (ieax<4);
ieax = varEDX;
DWORD iesi = varEDX;
ieax = ieax/16;
iesi = ieax/8;
varEDX = iesi + ieax*2 + 4;
pTempECX += varEDX;
varEDX = 0;
if(ieax>0)
{
do
{
if(varEDX)
*(pTempECX+varEDX) = 0;
else
*pTempECX = 1;
varEDX++;
}
while (varEDX < ieax);
}
pTempECX += ieax;
varEDX = 0;
if(ieax>0)
{
do
{
if(varEDX)
*(pTempECX+varEDX) = 0;
else
*pTempECX = 1;
varEDX++;
}
while (varEDX < ieax);
}
pTempECX = pTempECX + ieax*2;
ieax = 0;
if(iesi>0)
{
do
{
if(ieax)
*(pTempECX+ieax) = 0;
else
*pTempECX = 0;
ieax ++;
}
while (ieax<iesi);
}
}
void DecryptPacks()
{
BYTE* p1;
BYTE* p2;
DWORD dwDecryptLen;
p1 = &BufForRecv[0];
p2 = new BYTE [ *(DWORD*)p1 ];
dwDecryptLen = *(DWORD*)p1;
CopyMemory(p2,p1+4,dwDecryptLen);
ZeroMemory(p1,dwDecryptLen+4);
CryptDecrypt(hGenKey2,//密鈅句柄
0,//一个可选的散列对象
1,//一个布尔值,此值在最后一块数据块之前保持为FALSE,
0,//标志值
p2,//解密数据的指针
&dwDecryptLen);//缓冲区中待加密字符的数量
CopyMemory(p1,p2,dwDecryptLen);
BufForRecv = p1;
delete [] p2;
}
解决方案 »
- Windows Media Player 控件的“快退” 无效问题
- 有关DeleteObject()函数
- activex加载DLL和MFC程序加载DLL有区别吗?
- VC6 编译出现One or more files are out...
- 关于安装包的疑问!
- 如何生成dvd的vob文件
- 请问我知道直方图中有三个比较明显的波峰,但不知其确定的位置,该如何找到它们?
- std::vector<std::string>的问题
- 关于CRecordset 在OPEN中动态打开 catch(CDBException e)扑获不到错误,是什么原因
- 三个简单问题,多谢
- 如何实现大小动态改变?
- 请问:对话框 文档视图之间如何与SQL Server 2000 之间交互数据?
在哪一行数据出错?
blue1.dll是什么?
也就是IDC_OUT没有输出
SendMessage(hDlg,IDC_OUT,0,0);
用VC在SENDMESSAGE下断,结果转不到IDC_OUT 哪儿,帮我看看
这个sendmessage怎么不能跳到IDC_OUT
SendMessage(hDlg, WM_COMMAND, IDC_OUT, 0);
SendMessage到IDC_OUT一直循环,没有显示
另外你需要确定BufForRecv中是char型数据。
如果绘制代码不放到绘制消息里面,窗口是经不起刷新的。
"如果是这样你应该在IDC_OUT控件中响应WM_PAINT消息来输出文字(用BeginPaint获取HDC,最后EndPaint)。"
如果你对Windows的消息机制完全不了解,还是找本书学习一下吧。
Windows里面所有控件包括对话框都是Window,都有自己的窗口函数,都会收到WM_PAINT消息。