最近项目中需要对CPUID、硬盘序列号、网卡物理地址进行加密授权验证,网上这方面的资料代码很多,但很多都有错或者不能正确获取,通过整理与学习,将自己已经正确获得的代码分享出来吧。
code:
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
string GetCPUID()
{
std::string strCPUId;
unsigned long s1, s2;
char buf[32] = { 0 };
__asm{
mov eax, 01h //eax=1:取CPU序列号
xor edx, edx
cpuid
mov s1, edx
mov s2, eax
}
if (s1) {
memset(buf, 0, 32);
sprintf_s(buf, 32, "%08X", s1);
strCPUId += buf;
}
if (s2) {
memset(buf, 0, 32);
sprintf_s(buf, 32, "%08X", s2);
strCPUId += buf;
}
__asm{
mov eax, 03h
xor ecx, ecx
xor edx, edx
cpuid
mov s1, edx
mov s2, ecx
}
if (s1) {
memset(buf, 0, 32);
sprintf_s(buf, 32, "%08X", s1);
strCPUId += buf;
}
if (s2) {
memset(buf, 0, 32);
sprintf_s(buf, 32, "%08X", s2);
strCPUId += buf;
}
return strCPUId;
}
int main()
{
cout << "CPUID:" << GetCPUID() << endl;
getchar();
return 0;
}
为了验证获取结果和计算机的是不是一致,可以通过计算机的命令提示符进行查看。
在搜索框内输入cmd,然后输入命令 wmic cpu get ProcessorID 来查看ID信息。
https://blog.csdn.net/zkz10086/article/details/81505254?utm_medium=distribute.pc_relevant.none-task-blog-title-3&spm=1001.2101.3001.4242