c++/windows软件绑定网卡加密,实现一机一码

💂 个人主页:pp不会算法v
🤟 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主
💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦

奇思妙想系列文章

一、c\c++ windows自动打开cmd并进入mysql

二、c++\windows实现qq消息连发,群发器

三、c++\windows软件绑定网卡加密,实现一机一码

文章目录

    • 奇思妙想系列文章

最近接了一个小单子做个绑定网卡加密的demo,也是第一次了解吧,还挺有趣分享一下

相信大家都接触过加密软件,提起加密软甲我最先想起的就是数据库可视化工具Navicat了,navicat有一种方式就是给你一串请求码然后要你输入激活码,这个激活码就是根据这个请求吗解密之后得到的,
在这里插入图片描述
而且这个激活成功之后换了一台电脑那么就无效了,因为这是一机一码,那么怎么实现一机一码的呢,肯定是和电脑的某些唯一标识绑定关联起来了

对于一台电脑独一无二的信息常见的有两种:
1、网卡信息
2、主机序列号

那么这就好办了,我们只要根据网卡信息和主机序列号生成一个密钥就行了,然后加密一下变为注册码,客户要根据这个注册码解密出密钥然后输入解密之后的密钥就能进入软件主界面、

但是我们只需要输入一次密钥就行了(成功的前提下),那么之后我们怎么进入了,这好办解密成功之后我们只要把这个密钥写进注册表就行,然后每次打开软件先去注册表读取密钥,然后自动解锁

其实很简单,我前面说的有点复杂了,
软件的工作流程大致为:
打开–》读取注册表–》有密码然后加密之后看跟注册码是否一样,如果注册表没有密码或者密码错误那么弹出一个对话框供显示注册码和密钥输入框–》输入密钥正确那么就写进注册表然后进入主界面

既然是在windows下的软件那么就用winapi就行了
这里要用到一个库iphlapi.lib

下面我就简单写个根据网卡信息生成的唯一字符串的接口

CString Cdemo3App::GetPcinfoCode()
{std::string macAddress;IP_ADAPTER_INFO adapterInfo[16];DWORD bufferSize = sizeof(adapterInfo);DWORD result = GetAdaptersInfo(adapterInfo, &bufferSize);if (result == ERROR_SUCCESS){PIP_ADAPTER_INFO pAdapterInfo = adapterInfo;std::stringstream ss;for (DWORD i = 0; i < pAdapterInfo->AddressLength; i++){if (i > 0)ss << ":";ss << std::hex << (int)pAdapterInfo->Address[i];}macAddress = ss.str();}// 将 MAC 地址进行异或操作,得到全数字的结果std::string numericMacAddress;for (int i = 0; i < macAddress.length(); i++){char numericChar = (char)(macAddress[i] ^ '0');numericMacAddress += numericChar;}CString pcInfo;pcInfo.Format(_T("%s"), numericMacAddress.c_str());CString resultStr, temp;for (int i = 0; i < pcInfo.GetLength(); i++){temp.Format("%d", (int)pcInfo[i]);resultStr +=temp;}return resultStr;
}

加密解密:
这里我就用最简单的异或操作来加密那么解密就和加密的流程一样了,这应该属于是对称加密

CString Cdemo3App::GetKey(CString pcInfoCode)
{CString str = "3214569872021041520024925592652165";CString result;for (int i = 0; i < pcInfoCode.GetLength() && i < str.GetLength(); i++){TCHAR ch = (TCHAR)((pcInfoCode[i] - '0') ^ (str[i] - '0')) + '0';result += ch;}return result;
}

读取注册表

CString keyPath = _T("Software\\YourCompany\\YourApp");CString savedKey;HKEY hKey;if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\myApp", 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS){DWORD dataSize = 0;if (RegQueryValueEx(hKey, "Key", NULL, NULL, NULL, &dataSize) == ERROR_SUCCESS){TCHAR* buffer = new TCHAR[dataSize / sizeof(TCHAR)];if (RegQueryValueEx(hKey, "Key", NULL, NULL, (LPBYTE)buffer, &dataSize) == ERROR_SUCCESS){savedKey = buffer;}delete[] buffer;}RegCloseKey(hKey);}

写注册表

	// 写入注册表CString key;HKEY hKey;if (RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\myApp", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, &hKey, NULL) == ERROR_SUCCESS){RegSetValueEx(hKey, "Key", 0, REG_SZ, (LPBYTE)(LPCTSTR)key, (key.GetLength() + 1) * sizeof(TCHAR));RegCloseKey(hKey);}

在这里插入图片描述

demo源码地址:https://github.com/ppywj/windows-.git
不求fork,但求觉得对你有帮助三连一下,这是我写文章的动力,谢谢 ^ V ^

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/213501.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字符串函数的模拟实现(strlen,strcpy,strcat,strcmp,strstr)(图文并茂,清晰易懂)

目录 1. strlen函数2. strcpy函数3. strcat函数4. strcmp函数5. strstr函数 个人专栏&#xff1a; 《零基础学C语言》 1. strlen函数 strlen函数&#xff08;Get string length&#xff09;的功能是求字符串长度 使用注意事项&#xff1a; 字符串以 ‘\0’ 作为结束标志&…

Jmeter+influxdb+grafana监控平台在windows环境的搭建

原理&#xff1a;Jmeter采集的数据存储在infuxdb数据库中&#xff0c;grafana将数据库中的数据在界面上进行展示 一、grafana下载安装 Download Grafana | Grafana Labs 直接选择zip包下载&#xff0c;下载后解压即可&#xff0c;我之前下载过比较老的版本&#xff0c;这里就…

线性代数的艺术

推荐一本日本网友Kenji Hiranabe写的《线性代数的艺术》。这本书是基于MIT大牛Gilbert Strang教授的《每个人的线性代数》制作的。 虽然《线性代数的艺术》这本书仅仅只有12页的内容&#xff0c;就把线性代数的重点全画完了&#xff0c;清晰明了。 《线性代数的艺术》PDF版本&…

Python Opencv实践 - 全景图片拼接stitcher

做一个全景图片切片的程序Spliter 由于手里没有切割好的全景图片资源&#xff0c;因此首先写了一个切片的程序spliter。 如果有现成的切割好的待拼接的切片文件&#xff0c;则不需要使用spliter。 对于全景图片的拼接&#xff0c;需要注意一点&#xff0c;各个切片图片之间要有…

ubuntu环境删除qtcreator方法

文章目录 方法1方法2方法3参考不同的安装方法,对应不同的删除方法 方法1 apt-get或者dpkg 方法2 QtCreatorUninstaller 方法3 MaintenanceTool

STM32F10x进入低功耗模式

STM32F10x进入低功耗模式 目录 STM32F10x进入低功耗模式1 低功耗模式简介2 睡眠模式详解3 停止模式详解4 待机模式详解5 示例代码5.1 标准库函数定义5.2 进入低功耗模式参考代码 结束语 1 低功耗模式简介 在系统或电源复位以后&#xff0c;微控制器处于运行状态。当CPU不需继续…

【Spring】 IoCDI

回顾 企业命名规范 大驼峰:BookDao(首字母都大写) 类名 小驼峰:bookDao(第一个字母小写) 方法名 蛇形:book_dao(小写下划线_) 数据库 串形:book-dao(小写连字符-) 项目文件夹 各种注解 学习Spring MVC, 其实就是学习各种Web开发需要⽤的到注解 a. RequestMapping: 路由…

【elementui】el-popover在列表里循环使用,取消的doClose无效解决办法

目录 一、需求效果二、代码详情html方法接口 一、需求效果 在使用elementui的Popover 弹出框时&#xff0c;需求是在table列表里使用&#xff0c;循环出来&#xff0c;无法取消。 二、代码详情 html <el-table-column v-if"checkPermission([admin,user:resetPass…

案例015:Java+SSM+uniapp基于微信小程序的校园防疫系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

人工智能带来的各方面影响

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术在各个领域中的应用越来越广泛&#xff0c;已经开始对我们的生活方式、社会和经济结构产生深远的影响。 1.人工智能家庭化。人工智能技术使我们的生活变得更加便利和智能化。在家庭日常中&#xff0c;智能家居、智能…

C++学习之路(二)C++如何实现一个超简单的学生信息管理系统?C++示例和小项目实例

这个示例实现了一个简单的学生信息管理系统。它包括了学生类的定义&#xff0c;可以添加学生信息、显示所有学生信息&#xff0c;将学生信息保存到文件并从文件加载信息。通过这个示例&#xff0c;你可以了解到如何使用类、函数和文件操作来构建一个基本的信息管理系统。 一个简…

单片机串口通用收发代码

本篇博客大部分是自己收集和整理&#xff0c;借鉴了很多大佬的图片和知识点整理&#xff0c;如有侵权请联系我删除。本博客内容原创&#xff0c;创作不易&#xff0c;转载请注明 串口接收最后应有一定的协议&#xff0c;如发送一帧数据应该有头标志或尾标志&#xff0c;也可两个…