首页系统综合问题Qt编写密钥生成器+使用demo

Qt编写密钥生成器+使用demo

时间2022-12-30 18:08:35发布分享专员分类系统综合问题浏览119

今天小编给各位分享万能激活码生成器的知识,文中也会对其通过Qt编写密钥生成器+使用demo和在linux下,qt可以使用axcontainer吗等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!

内容导航:

  • Qt编写密钥生成器+使用demo
  • 在linux下,qt可以使用axcontainer吗
  • 如何使用keytool创建密钥仓库
  • 基于DCMTK的Qt控制台应用程序,该如何设置
  • 一、Qt编写密钥生成器+使用demo

    一、前言

    在很多商业软件中,需要提供一些可以试运行的版本,这样就需要配套密钥机制来控制,纵观大部分的试用版软件,基本上采用以下几种机制来控制。

    1:远程联网激活,每次启动都联网查看使用时间等,这种方法最完美,缺点是没法联网的设备就歇菜了。

    2:通过获取本地的硬盘+CPU等硬件的编号,做一个运算,生成一个激活码,超过半数的软件会采用此方法,缺点是不能自由控制软件的其他参数,比如软件中添加的设备数量的控制。

    3:设定一个运行到期时间+数量限制+已运行时间的密钥文件,发给用户配套软件使用,缺点是如果仅仅设置的是运行到期时间,用户可以更改电脑时间来获取更长的使用时间,在电脑不联网的情况下。

    本demo采用抛砖引玉的形式,用第三种方法来实现,密钥文件采用最简单的异或加密,可以自行改成其他加密方法。

    二、实现的功能可以控制软件使用时间。可以控制软件运行时间。可以控制设备的数量。可以在工具上启动和停止服务。可以查看已重启过几次。可以清空复位重启次数。三、效果图

    四、完整代码
    #include "frmmain.h"#include "ui_frmmain.h"#include "qmessagebox.h"#include "qfile.h"#include "qprocess.h"#include "qdebug.h"frmMain::frmMain(QWidget *parent) : QWidget(parent), ui(new Ui::frmMain){ ui->setupUi(this); this->initForm(); qDebug() << this->getCpuName() << this->getCpuId() << this->getDiskNum();}frmMain::~frmMain(){ delete ui;}void frmMain::initForm(){ QStringList min; min << "1" << "5" << "10" << "20" << "30"; for (int i = 1; i <= 24; i++) { min << QString::number(i * 60); } ui->cboxMin->addItems(min); ui->cboxMin->setCurrentIndex(1); ui->dateEdit->setDate(QDate::currentDate()); for (int i = 5; i <= 150; i = i + 5) { ui->cboxCount->addItem(QString("%1").arg(i)); }}QString frmMain::getWMIC(const QString &cmd){ //获取cpu名称:wmic cpu get Name //获取cpu核心数:wmic cpu get NumberOfCores //获取cpu线程数:wmic cpu get NumberOfLogicalProcessors //查询cpu序列号:wmic cpu get processorid //查询主板序列号:wmic baseboard get serialnumber //查询BIOS序列号:wmic bios get serialnumber //查看硬盘:wmic diskdrive get serialnumber QProcess p; p.start(cmd); p.waitForFinished(); QString result = QString::fromLocal8Bit(p.readAllStandardOutput()); QStringList list = cmd.split(" "); result = result.remove(list.last(), Qt::CaseInsensitive); result = result.replace("\r", ""); result = result.replace("", ""); result = result.simplified(); return result;}QString frmMain::getCpuName(){ return getWMIC("wmic cpu get name");}QString frmMain::getCpuId(){ return getWMIC("wmic cpu get processorid");}QString frmMain::getDiskNum(){ return getWMIC("wmic diskdrive where index=0 get serialnumber");}QString frmMain::getXorEncryptDecrypt(const QString &data, char key){ //采用异或加密,也可以自行更改算法 QByteArray buffer = data.toLatin1(); int size = buffer.size(); for (int i = 0; i < size; i++) { buffer[i] = buffer.at(i) ^ key; } return QLatin1String(buffer);}void frmMain::on_btnOk_clicked(){ bool useDate = ui->ckDate->isChecked(); bool useRun = ui->ckRun->isChecked(); bool useCount = ui->ckCount->isChecked(); if (!useDate && !useRun && !useCount) { if (QMessageBox::question(this, "询问", "确定要生成没有任何限制的密钥吗?") != QMessageBox::Yes) { return; } } QString strDate = ui->dateEdit->date().toString("yyyy-MM-dd"); QString strRun = ui->cboxMin->currentText(); QString strCount = ui->cboxCount->currentText(); QString key = QString("%1|%2|%3|%4|%5|%6").arg(useDate).arg(strDate).arg(useRun).arg(strRun).arg(useCount).arg(strCount); QFile file(QApplication::applicationDirPath() + "/key.db"); file.open(QFile::WriteOnly | QIODevice::Text); file.write(getXorEncryptDecrypt(key, 110).toLatin1()); file.close(); QMessageBox::information(this, "提示", "生成密钥成功,将 key.db 文件拷贝到对应目录即可!");}void frmMain::on_btnClose_clicked(){ this->close();}

    一、在linux下,qt可以使用axcontainer吗

    Linux下完整的MySQL开发需要安装服务器端,如果安装客户端也没什么不好。直接在软件中心搜mysql,把client和server选上。  环境说明:  ubuntu 10.04.2  QtSDK (1.5G安装包的那个)  mysql5.1  1.安装MySQL  Linux下完整的MySQL开发需要安装服务器端,如果安装客户端也没什么不好。直接在软件中心搜mysql,把client和server选上。  server在安装时会提示为root用户设置密码,设一个好了。  我使用的是mysql5.1版本,用户名密码存储在一个叫mysql的数据库里,只有管理员级别才能看到。  如果直接在终端中输入 mysql,可能会提示ERROR 1045 (28000),这是因为这时候你是以自己用户名访问数据库,而目前数据库中只有一个root用户。没关系,如果有必要,可以添加一个用户进去:  mysql -uroot -p -- 以root用户登录  grant usage on *.* to dummy@localhost; -- 授权名为dummy的用户本地登录,这里换成自己的用户名就可以了  不过这时候直接mysql只有普通的权限,创建数据库、操作mysql都是不可以的,如果真有将其赋予管理员权限的需要,可以自己查阅有关资料。  2.安装Qt的MySQL驱动。  方法一:直接sudo apt-get install libqt4-sql-mysql ,这是Qt4的mysql驱动,就不用自己费劲编译了,不过可能会额外下载一些东西。  将 /usr/lib/qt4/plugins/sqldrivers/libqsqlmysql.so拷贝到你的QtSDK sqldrivers目录下,我当时是直接用普通权限安装,目录为:~/QtSDK/Desktop/Qt/473/gcc/plugins/sqldrivers  方法二:其实你也可以sudo apt-get download libqt4-sql-mysql,把包解压缩,然后把里面的so文件搜出来直接拷贝到那里。  方法三:乖乖按照官方方法编译,但是貌似可行性不大,因为新版本的QtSDK并没有src目录,默认也没有mysql的驱动。  3.做个demo试一下  记得在pro文件中 QT +=那里加上sql,否则qmake是不会去找sql的相关部分的  复制代码代码如下:  #include QtCore/QCoreApplication  #include QSqlDatabase  #include QDebug  int main(int argc, char *argv[])  {  QCoreApplication a(argc, argv);  QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");  db.setHostName("localhost");  db.setDatabaseName("study");  db.setUserName("root");  db.setPassword("tyh");  if(!db.open()){  qDebug() "Unable to open database";  }else{  qDebug() "Database connection established";  }  return a.exec();  }  这里study这个数据库之前我已经创建过了,如果连接成功,就会显示Database connection established。 我是建立的控制台程序哈。 软件教程小编推荐: Linux安装配置MariaDB数据库全程详解 Linux系统怎么设置开机密码? Linux启动菜单修改教程

    二、如何使用keytool创建密钥仓库

    一步:生成密钥对
    您首先要做的是创建一个密钥仓库和生成密钥对。您可以使用以下命令:
    keytool -genkey -keyalg RSA -keysize 512 -dname "cn=hyq,o=eagle,c=cn" -alias weblogic -keypass 123456 -keystore C:/mykeystore/weblogic.jks -storepass 123456 -validity 365
    (请注意:键入该命令时必须使其成为一行。此处用多行来显示,主要是为了可读性。)如下图:
    Snap2.gif

    该命令将在 C 盘的 “mykeystore” 目录中创建名为 “weblogic.jks” 的密钥仓库,并赋予它口令 “ 123456 ” 。它将为实体生成公钥 / 私钥对,该实体的 “ 特征名 ” 为:常用名 “hyq” 、组织 “eagle” 和两个字母的国家代码 “cn” 。“ -keyalg ”指定它使用的是那种密钥生成算法来创建密钥,缺省的是 “DSA” 密钥生成算法(会使用缺省的 “ 带 DSA 的 SHA1” 签名算法),两个密钥(公钥与私钥)的长度是 512 位,由 -keysize 来指定,默认的是 1024 位。 该证书包括公钥和特征名信息。该证书的有效期为 365 天,由 -validity 来指定,且与别名 “business” 所代表的密钥仓库项关联。私钥被赋予口令 “ 123456 ” 。

    命令行里 DName 信息注解

    DN 信息域
    含义
    CN
    域名或 IP
    OU
    部门,没有部门的可不要此项
    O
    单位名称
    L
    单位地址
    S
    省份的拼音(第一个字母大写)
    C
    国家的简写 ( CN 代表中国)

    如果采用选项的缺省值,可以大大缩短该命令。实际上,这些选项并不是必需的;对于有缺省值的选项,未指定时将使用缺省值,对于任何被要求的值,您将会得到要求输入它的提示。例如:输入命令 keytool -genkey -keystore "C:/tone.jks" -storepass 123456 -keyalg RSA ,就会有如下提示:
    Snap3.gif

    注意:这里的 密钥仓库路径一定要存在,如果不存在的话,它就会抛如下的异常
    Snap4.gif
    第二步 : 产生证书请求certreq.pem 文件
    使用如下命令:
    keytool -certreq -alias weblogic -sigalg "MD5withRSA" -file C:/mykeystore/certreq.pem -keypass 123456 -keystore C:/mykeystore/weblogic.jks -storepass 123456
    Snap5.gif
    这样在 C:/mykeystore/ 目录下 就会产生一个 certreq.pem 文件,内容如下:
    -----BEGIN NEW CERTIFICATE REQUEST-----
    MIHlMIGQAgEAMCsxCzAJBgNVBAYTAmNuMQ4wDAYDVQQKEwVlYWdsZTEMMAoGA1UEAxMDaHlxMFww
    DQYJKoZIhvcNAQEBBQADSwAwSAJBAMhaIG2Ki7+RwZUP4gPBdTbnY38bisW16u1XUyysPxdNwSie
    aSd6E3Hm277E7NjHoz56ZoaYdPPDmdiTkMrS9rcCAwEAAaAAMA0GCSqGSIb3DQEBBAUAA0EAYRNl
    l5dyGgV9hhu++ypcJNQTrDIwjx1QT4fgVubrtIaHU0fzHamD5QG6PYddw9TL51XQHvu6tOS0NUc/
    ItNKJw==
    -----END NEW CERTIFICATE REQUEST-----

    第三步:这就相对来说简单多了,就是向CA提交证书请求。
    你可以随便从网上找一家免费的CA认证适用机构(很多的),然后按照上面的提示进行操作就可以了,这一步就要用到前面生成的certreq.pem 文件了。(注意:一定要下载根证书)
    将生成的证书和下载的根证书放至你比较容易找到的位置,我一般将它们和生成的jks文件放到一起。

    第四步:导入证书
    通过命令:keytool -import -alias RootCA -trustcacerts -file C:/mykeystore/RootCADemo.cer -keystore C:/mykeystore/weblogic.jks -storepass 123456将根证书导入第一步生成的weblogic.jks中,接着将所有其它的证书按照此命令全部导入。(注意证书的别名不能重复,同时一定注意要用上 -trustcacerts,否则,你在以后使用时,它将会认为你导入的这些证书是不可信任的 ,就会导致你在配置SSL时不能正常的工作。)
    这就全部完成了密钥仓库的创建。然后就可以在支持这些证书格式的服务器上使用了。下一篇将会写一下在weblogic上如何配置双向SSL。

    三、基于DCMTK的Qt控制台应用程序,该如何设置

    楼主我在vs的qt环境下编译也遇到了和你一样的问题,请问你有没有解决?

    关于万能激活码生成器的问题,通过《如何使用keytool创建密钥仓库》、《基于DCMTK的Qt控制台应用程序,该如何设置》等文章的解答希望已经帮助到您了!如您想了解更多关于万能激活码生成器的相关信息,请到本站进行查找!

    爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。

    万能激活码生成器
    为什么没人告诉我,路由器也能刷机? “网络已连接,网络不可用”问题,维修师傅一招轻松搞定