C++使用MD5加密验证系统时间,给你的库设置个有效期吧

    最近封装算法的SDK给客户使用,领导要求加一个通过读取系统时间来限制客户使用期的功能,于是拙劣的加了一个读取系统时间,并进行MD5加密,与提前写好的MD5库文件进行比对,以验证有效期。


设置有效期,加密并保存成二进制文件:

	fstream f;

	f.open("configFile", ofstream::app | ios::binary | ofstream::out);

	if (!f.is_open())
	{
		cerr << "file open failed!" << endl;
		getchar();
		exit(0);
	}
	for (int i = 20180403; i < 20180431; ++i)//有效期自己设定
	{
		string s = to_string(i);
		unsigned char encrypt[9] = { 0 };
		
		for (int j = 0; j < s.size(); ++j)
		{
			encrypt[j] = (unsigned char)s[j];
		}

		encrypt[8] = '\0';

 		unsigned char decrypt[16];
 		memset(decrypt, 0, sizeof(decrypt)*sizeof(unsigned char));
 
 		MD5Init(&md5);
		MD5Update(&md5, encrypt, strlen((char*)encrypt));
		MD5Final(&md5, decrypt);

		printf("\n加密前:%s\n加密后32位:", encrypt);
		for (int ii = 0; ii < 16; ii++)
		{
			printf("%02x", decrypt[ii]);	
			f.write((char*)&decrypt[ii], sizeof(decrypt[ii]));
		}				
	}

	f.close();




读取系统时间并比对:

#ifdef CHECK_CONFIGFILE
			MD5        md5;
			time_t	   t = time(0);
			char	   tmp[9];

			strftime(tmp, sizeof(tmp), "%Y%m%d", localtime(&t));

			unsigned char decrypt[16];
			memset(decrypt, 0, sizeof(decrypt) * sizeof(unsigned char));
			
			MD5Init(&md5);
			MD5Update(&md5, (unsigned char*)tmp, strlen((char*)tmp));
			MD5Final(&md5, decrypt);

			std::fstream f;
			f.open("configFile", std::ifstream::in | std::ios::binary);

			if (!f.is_open())
			{
				std::cerr << "configFile open failed!" << std::endl;
				getchar();
				return FALSE;
			}

			bool validCode = false;

			for (int ii = 0; ; ++ii)
			{
				unsigned char decrypt0[16] = { 0 };

				if (f.peek() == EOF)
				{
					break;
				}
				
				for (int i = 0; i < 16; i++)
				{
					f.read((char*)&decrypt0[i], sizeof(decrypt0[i]));
					//printf("%02x", decrypt0[i]);
				}
							
				if (0 == strcmpu(decrypt0, decrypt, 16))
				{
					validCode = true;
					break;
				}
			}

			f.close();

			if (!validCode)
			{
				std::cout << "Detection DLL 超过使用期限";
				return FALSE;
			}			
#endif


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值