注意:
该代码记得是参考了github上的一个小项目,具体出处忘了。
因为一些原因,大部分代码不能公开,这里写一些能公开的,和SMC有关的代码。
加密方法:
aes使用常规的aes方法即可
int main(int argc, char *argv[])
{
int iret = 0;
char *inputdata = NULL;
int filesize = 0;
DWORD readcount = 0;
HANDLE readfh = INVALID_HANDLE_VALUE;
HANDLE writefh = INVALID_HANDLE_VALUE;
long cryptedsize = 0;
char outfile[MAX_BUF_SIZE + 1];
if (argc == 4 && !strncmp(argv[1], "-e", 2))
{
if ((readfh = CreateFile(argv[3], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE)
{
filesize = GetFileSize(readfh, 0);
if ((inputdata = (char *) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, filesize)) != NULL)
{
if (ReadFile(readfh, inputdata, filesize, &readcount, NULL))
{
if (AESEncrypt(argv[2], &inputdata, (long) readcount, &cryptedsize))
{
ZeroMemory(outfile, sizeof(outfile));
snprintf(outfile, sizeof(outfile)-1, "xxx.xxx", argv[3]);
if ((writefh = CreateFile(outfile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE)
{
WriteFile(writefh, inputdata, cryptedsize, (DWORD *) &cryptedsize, NULL);
}
}
}
}
}
}
return(iret);
}
解密方法
char* decode()
{
WCHAR filename[MAX_PATH] = _T("xxx.xxx");
char* buf;
SECURITY_ATTRIBUTES sio;
buf = (char*)malloc(1024);
DWORD Readlen, outputlen;
HANDLE hfile = CreateFileW((LPCWSTR)filename, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
OPEN_ALWAYS,
0,
0);
if (hfile == INVALID_HANDLE_VALUE)
{
return buf;
}
ReadFile(hfile, buf, GetFileSize(hfile, 0), &Readlen, 0);
char password[100];
scanf("%s", &password);
if (decrypt(password, buf, GetFileSize(hfile, 0), &outputlen)) {
return buf;
}
exit;
}
}