论SMC的实现(3)实战代码样例

注意:

该代码记得是参考了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;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值