• 8320阅读
  • 5回复

[讨论]给Qt程序生产注册码 [复制链接]

上一主题 下一主题
离线行潇
 

只看楼主 倒序阅读 楼主  发表于: 2014-09-03
   大家好,我最近做的一个项目需要给程序生产注册码,但是不怎么做好,不知大家有什么建议或者方法提供参考一下呢,谢谢!
离线hq119119

只看该作者 1楼 发表于: 2014-11-11
程序产生一个包含硬件信息的文件,你根据这个文件产生注册码
离线fghfghfgh

只看该作者 2楼 发表于: 2014-11-12
获取机器的硬件信息 mac 地址  主板id 等等, 我前几天也弄过,不过没有解决好 后来也就放弃了 因为项目的这个功能不是很着急
离线fghfghfgh

只看该作者 3楼 发表于: 2014-11-12
获取机器的硬件信息 mac 地址  主板id 等等, 我前几天也弄过,不过没有解决好 后来也就放弃了 因为项目的这个功能不是很着急


给你贴一段代码,供你参考,希望可以帮到你
如果这个问题你解决后,可以分享一份代码给我吗。发私信给我也可以的哦 嘿嘿

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <windows.h> //DWORD
  4. #include <QCryptographicHash>
  5. #include <QDebug>
  6. MainWindow::MainWindow(QWidget *parent) :
  7.     QMainWindow(parent),
  8.     ui(new Ui::MainWindow)
  9. {
  10.     ui->setupUi(this);
  11.     ui->textEdit1->setText("");
  12.     qDebug()<<"start";
  13.     qDebug()<<"getCPUManID:"<<this->getCPUManID();//通过调用汇编语言获取CPU制造商信息
  14.     qDebug()<<"getCpuInfo:"<<this->getCpuInfo();//处理器信息
  15.     qDebug()<<"GetCPUID:"<<this->GetCPUID();//
  16.     qDebug()<<"GetHarddiskNum:"<<this->GetHarddiskNum();//硬盘序列号
  17.     QString text1="";
  18.     text1.append("getCPUManID:"+this->getCPUManID()+"\n");
  19.     text1.append("getCpuInfo:"+this->getCpuInfo()+"\n");
  20.     text1.append("GetCPUID:"+this->GetCPUID()+"\n");
  21.     text1.append("GetHarddiskNum:"+this->GetHarddiskNum()+"\n");
  22.     ui->textEdit1->setText(text1);
  23. }
  24. MainWindow::~MainWindow()
  25. {
  26.     delete ui;
  27. }
  28. void MainWindow::on_pushButton_clicked()
  29. {
  30.     QString temp1;
  31.     temp1.append("getCPUManID:"+this->getCPUManID()+"*");
  32.     temp1.append("getCpuInfo:"+this->getCpuInfo()+"*");
  33.     temp1.append("GetCPUID:"+this->GetCPUID()+"*");
  34.     temp1.append("GetHarddiskNum:"+this->GetHarddiskNum()+"*");
  35. qDebug()<<this->jiami(temp1);
  36. }
  37. QString MainWindow::getCPUManID()
  38. //通过调用汇编语言获取CPU制造商信息
  39. {
  40. //用来存储信息
  41. DWORD deax;
  42. DWORD debx;
  43. DWORD decx;
  44. DWORD dedx;
  45. char ID[25];//存储制造商信息
  46. memset(ID,0,sizeof(ID));//先清空数组 ID
  47. //gcc中应该是 __asm__
  48. __asm
  49. {
  50. mov eax,0
  51. cpuid
  52. mov deax,eax
  53. mov debx,ebx
  54. mov decx,ecx
  55. mov dedx,edx
  56. }
  57. memcpy(ID+0,&debx,4);//制造商信息前四个字符复制到数组
  58. memcpy(ID+4,&dedx,4);//中间四个
  59. memcpy(ID+8,&decx,4);//最后四个
  60. //如果返回 char * ,会出现乱码;故返回 string 值
  61. //qDebug()<<"manufacture id is "<<QString::fromLocal8Bit(ID);
  62. return QString::fromLocal8Bit(ID);
  63. }
  64. QString MainWindow::getCpuInfo()
  65. //get cpu info
  66. {
  67.     SYSTEM_INFO info;
  68.     GetSystemInfo(&info);
  69. return QString::number(info.dwNumberOfProcessors,16).toUpper()+QString::number(info.dwProcessorType,16).toUpper();
  70. }
  71. QString MainWindow::GetCPUID()
  72. // get cpu id
  73. {
  74.     DWORD   dwId1, dwId2, dwId3, dwId4;
  75.     char   szCompany[13];
  76.     //PCHAR   pCompany = szCompany;
  77.     //DWORD dwCPU;
  78.     szCompany[12]=0;
  79.     _asm
  80.     {
  81.         pushfd
  82.             pushad
  83.             //取得CPU的ID号
  84.             mov   eax,1   //功能号
  85.             _emit   0x0f
  86.             _emit   0xa2
  87.             mov   dwId1,eax
  88.             mov   dwId2,ebx
  89.             mov   dwId3,ecx
  90.             mov   dwId4,edx
  91. //            //取得CPU的制造公司名称
  92. //            mov   edi,pCompany   //功能号
  93. //            mov   eax,0
  94. //            _emit   0x0f
  95. //            _emit   0xa2
  96. //            mov   eax,ebx
  97. //            stosd
  98. //            mov   eax,edx
  99. //            stosd
  100. //            mov   eax,ecx
  101. //            stosd
  102.             popad
  103.             popfd
  104.     }
  105.     DWORD dwResult = 0;
  106.     DWORD dwTemp1 = dwId1 << 12;
  107.     DWORD dwTemp2 = dwId2 << 8 ;
  108.     DWORD dwTemp3 = dwId3 << 4;
  109.     dwResult = dwTemp1 + dwTemp2 + dwTemp3 + dwId4;
  110.     return QString::number(dwResult,16).toUpper();
  111. }
  112. QString MainWindow::GetHarddiskNum()
  113. //硬盘序列号
  114. {
  115.     char cVolume[256];                                         //
  116.     char cFileSysName[256];
  117.     DWORD dwSerialNum;                                          //硬盘序列号
  118.     DWORD dwFileNameLength;
  119.     DWORD dwFileSysFlag;
  120.     GetVolumeInformationA( "C://", cVolume, 256, &dwSerialNum, &dwFileNameLength,
  121.         &dwFileSysFlag, cFileSysName, 256);
  122.     return QString::number(dwSerialNum,16).toUpper();
  123. }
  124. QString MainWindow::jiami(const QString text){
  125.     qDebug()<<text;
  126.     QByteArray byte_array;
  127.     byte_array.append(text);
  128.     QByteArray hash_byte_array = QCryptographicHash::hash(byte_array, QCryptographicHash::Sha3_512);
  129.     QString Sha512 = hash_byte_array.toHex();
  130.     return Sha512;
  131. }



离线celerylxq

只看该作者 4楼 发表于: 2016-01-04

离线孤独不苦

只看该作者 5楼 发表于: 2017-07-28
哥们,你这个注册码的代码实现了吗,能不能给我分享下1074946541@qq.com,跪求
快速回复
限100 字节
 
上一个 下一个