Qt-序列号生成器
一直想做一個序列號的生成器,今天終于有了開始了,目前只有讀取硬件生成,還沒有做生成序列號的規(guī)則。
?
目前實現(xiàn)的功能就是讀取系統(tǒng)磁盤卷加上CPU ID 和自己的加密字符串,在利用MD5加密,轉換成標準32位序列號。稱為一個偽裝好的加密序列。防止別人看我怎么生成,哈哈,不知道管用不。
上最丑的界面
核心代碼
?
/** 生成序列號*/ const QString Poewr_Key::get_SerialNumber() {QString cpu_id = "";QProcess p(0);p.start("wmic CPU get ProcessorID");p.waitForStarted();p.waitForFinished();cpu_id = QString::fromLocal8Bit(p.readAllStandardOutput());cpu_id = cpu_id.remove("ProcessorId").trimmed();QString lpRootPathName = "C:\\";LPTSTR lpVolumeNameBuffer=new TCHAR[12];//磁盤卷標DWORD nVolumeNameSize=12;// 卷標的字符串長度DWORD VolumeSerialNumber;//硬盤序列號DWORD MaximumComponentLength;// 最大的文件長度LPTSTR lpFileSystemNameBuffer=new TCHAR[10];// 存儲所在盤符的分區(qū)類型的長指針變量DWORD nFileSystemNameSize=10;// 分區(qū)類型的長指針變量所指向的字符串長度DWORD FileSystemFlags;// 文件系統(tǒng)的一此標志GetVolumeInformation((LPTSTR)lpRootPathName.utf16(),lpVolumeNameBuffer, nVolumeNameSize,&VolumeSerialNumber, &MaximumComponentLength,&FileSystemFlags,lpFileSystemNameBuffer, nFileSystemNameSize);return (cpu_id.mid(0,4) + "D-"+ cpu_id.mid(4,4) + "R-" +cpu_id.mid(8,4) + "E-" + cpu_id.mid(12,4) + "A-" +QString::number(VolumeSerialNumber,10).mid(0,4)+"M"); } /** MD5加密*/ const QString Poewr_Key::hash_Encryption(const QString temp) {QByteArray byte_array;byte_array.append(temp);QByteArray hash_byte_array = QCryptographicHash::hash(byte_array,QCryptographicHash::Md5);return hash_byte_array.toHex().toUpper(); } /** 格式化生成序列號*/ const QString Poewr_Key::format_HASHString(const QString hashtemp) {QString retemp = "";for(int i = 0; i < 7; i++){retemp += hashtemp.mid(4*i,4) + "-";}retemp += hashtemp.mid(28,4);return retemp; } /** 去除格式,還原MD5序列*/ const QString Poewr_Key::remove_Format(const QString formathash) {QString temp = "";for(int i = 0; i < 8; i++){temp += formathash.mid(5*i,4);}return temp; }
源碼連接 碼云地址:https://gitee.com/DreamLife-Technology_DreamLife/Qt-Power_Key
?
? ? ? ? ? ? ? ?GitHub地址:https://github.com/DreamLifeOffice/Power_Key? ?(已更新)
?
?
總結
- 上一篇: Android Storage Mana
- 下一篇: MCU_ZigBee协议栈相关函数总结