您的位置:首页 > 编程语言 > Qt开发

Qt exe简单 加密

2018-03-06 15:52 579 查看
1,主程序 main 函数
#include <QMessageBox>
#include <Windows.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//注册
QString fileName = QApplication::applicationFilePath();
QFile file;
file.setFileName(fileName);
if(!file.open(QIODevice::ReadOnly))
return 1;
int fileSize = file.size();
file.seek(fileSize-15);
char lp[15];
int number = file.read(lp,15);//读解密匙
file.close();
DWORD num=atol(lp);
num^=0x1999aa98;
num^=0x12345678;//解密演算,还原为c盘序列号
QString lpRootPathName = "C:\\";
DWORD VolumeSerialNumber;
GetVolumeInformation((LPTSTR)lpRootPathName.utf16(),NULL,12,&VolumeSerialNumber,NULL,NULL,NULL,15);
if(num!=VolumeSerialNumber)
{
QMessageBox::information(NULL,QStringLiteral("注册"),QStringLiteral("软件未注册,请先注册!"));
return 1;
}
Widget w;
w.show();
return a.exec();
}



2,客户端,获取 磁盘序列号 经过运算后,提供给 服务端
#include "widget.h"
#include "ui_widget.h"
#include <Windows.h>
#include <QMessageBox>
#include <QFile>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowTitle(QStringLiteral("注册Client"));
//读取序列号
QString lpRootPathName = "C:\\";
DWORD VolumeSerialNumber;
GetVolumeInformation((LPTSTR)lpRootPathName.utf16(),NULL,12,&VolumeSerialNumber,NULL,NULL,NULL,15);
VolumeSerialNumber^=0x12345678;
ui->serialNumber->setText(QString::number(VolumeSerialNumber));
ui->registrationCode->setFocus();
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_registerBtn_clicked()
{
long num = ui->registrationCode->text().toLong();//序列号
num^=0x1999aa98;
if(num==ui->serialNumber->text().toLong())
{
QMessageBox::information(this,QStringLiteral("注册"),QStringLiteral("注册成功"));
//写入 exe
QString fileName = QApplication::applicationDirPath()+"/PVAssist.exe";
    QFile file;
    file.setFileName(fileName);
if(!file.open(QIODevice::Append))
return;
    int fileSize = file.size();
file.seek(fileSize);
    char lp[15];
memcpy(lp,ui->registrationCode->text().toStdString().c_str(),15);
file.write(lp,15);
    file.close();
}
else
QMessageBox::information(this,QStringLiteral("注册"),QStringLiteral("注册失败"));
}



3,服务端 ,根据 客户端的序列号 生成 注册码,授权给客户端。
void Widget::on_genrateRegistrationCode_clicked()
{
long num = ui->serialNumber->text().toLong();
num^=0x1999aa98;
ui->registerCode->setText(QString::number(num));
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐