Qt 实现程序密钥注册功能,MD5加密+AES加密,并实现一台电脑系统一个密钥

qt实现了一个给自己软件加密的功能。

原理是:

需要被注册的软件第一次运行的时候,在系统的注册表里面注册一个键值,如下:

这个值作为生成密钥的用户识别号,然后生成密钥文件key.db,把这个key.db文件放到软件执行目录下,即可完成软件的注册并正常使用软件。

注:将cpu,网卡,硬盘信息读取出来,将它们作为用户识别号,这样更方便?

软件第一次打开的界面及密钥生成工具软件界面如下:

将密钥生成工具软件生成的key.db放到软件执行目录下之后,软件即可正常使用,如下图:

代码使用了MD5加密 外加 AES加密,

解密和加密的核心代码如下:

    QString frmMain::getEncrypt(const QString &data, QString key)//data是需要被加密的原始数据,我这里放的是时间信息,key是注册表中的值
    {
        QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB, QAESEncryption::ZERO);
        QByteArray hashKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Md5);
        QByteArray encodedText = encryption.encode(data.toUtf8(), hashKey);
        QString str_encode_text=QString::fromLatin1(encodedText.toBase64());
        qDebug()<<"str_encode_text.size():"<<str_encode_text.size();
        return str_encode_text;
     
    }
     
    QString frmMain::getDecrypt(const QString &data, QString key)//data是需要被加密的原始数据,我这里放的是时间信息,key是注册表中的值
    {
        QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB, QAESEncryption::ZERO);
        QByteArray hashKey2 = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Md5);
        QByteArray decodedText = encryption.decode(QByteArray::fromBase64(data.toLatin1()), hashKey2);
        return decodedText;
    }

源码链接:

https://download.csdn.net/download/weixin_43935474/85311488

————————————————

版权声明:本文为CSDN博主「GreenHandBruce」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_43935474/article/details/124623987

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt一个功能强大的跨平台应用开发框架,支持多种加密算法,包括AES加密算法。在Qt实现AES/ECB/PKCS5Padding加密解密需要以下步骤: 1. 导入相关的库文件。在Qt中,可以通过调用`#include <QCryptographicHash>`和`#include <QByteArray>`来导入相关的库文件。 2. 选择合适的AES模式。在这个例子中,我们选择了ECB模式,这是一种简单的模式,适用于数据块相互独立的情况。同时,我们要确保使用PKCS5Padding填充方式。 3. 编写加密函数。在加密函数中,我们需要提供待加密的数据和密钥。具体实现可以参考以下代码: ```cpp QString encrypt(QString data, QString key) { QByteArray rawData = data.toUtf8(); QByteArray rawKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Md5); // 创建AES加密对象 AESCrypt aes(rawKey, AESCrypt::ECB, AESCrypt::PKCS5Padding); // 加密数据 QByteArray encryptedData = aes.encrypt(rawData); // 返回加密后的数据 return QString(encryptedData.toBase64()); } ``` 4. 编写解密函数。在解密函数中,我们同样需要提供待解密的数据和密钥。具体实现可以参考以下代码: ```cpp QString decrypt(QString data, QString key) { QByteArray encryptedData = QByteArray::fromBase64(data.toUtf8()); QByteArray rawKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Md5); // 创建AES解密对象 AESCrypt aes(rawKey, AESCrypt::ECB, AESCrypt::PKCS5Padding); // 解密数据 QByteArray decryptedData = aes.decrypt(encryptedData); // 返回解密后的数据 return QString(decryptedData); } ``` 以上是用Qt实现AES/ECB/PKCS5Padding加密解密的简单示例。根据具体的需求,你可能需要进一步完善这些函数和添加错误处理等功能。此外,需要注意的是,加密算法涉及数据安全,建议在生产环境中使用经过专业验证的加密方式,并采取其他的安全措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值