10、Qt:对数据进行加密、解密

一、说明

在Qt项目中简单的对数据进行加密解密,有如下两种方式
1、QCryptographicHash
Qt提供了用于加密的类QCryptographicHash,但是QCryptographicHash类只有加密功能,没有解密功能
2、Qt-AES
使用第三方AES库,对数据进行加密解密

二、使用QCryptographicHash

新建一个Qt项目,基类选择QMainWindow,

在界面上拖拽如下两个控件,并进行布局

更改.h代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
更改.cpp代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QCryptographicHash>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QByteArray array;
    array.append(ui->lineEdit->text());
    QCryptographicHash hash(QCryptographicHash::Md5); //Md5加密
    hash.addData(array); //添加数据
    QByteArray retArray = hash.result(); //加密后的数据
    qDebug() << retArray.toHex(); //转化成16进制
}
运行,随意输入一下数据,如:123abc,点击pushButton

三、使用Qt-AES

访问下面的链接,下载Qt-AES相关文件

创建一个Qt项目,基类选择“QMainWindow”,把qaesencryption.h和qaesencryption.cpp两个文件添加到项目中

更改.h代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QCryptographicHash>
#include <QDebug>
#include "qaesencryption.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    QString encodedText(QString data, QString key); //加密
    QString decodedText(QString data, QString key); //解密

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
更改.cpp代码
 
#include "MainWindow.h"
#include "ui_MainWindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString data = "qwer123456"; //要加密的数据
    QString key = "9876543"; //密钥
    QString encoded = encodedText(data, key); //加密
    QString decoded = decodedText(encoded, key); //解密·
    qDebug() << "源数据:" << data;
    qDebug() << "加密:" << encoded;
    qDebug() << "解密:" << decoded;
}

MainWindow::~MainWindow()
{
    delete ui;
}

//使用AES对数据进行加    密
QString MainWindow::encodedText(QString data, QString key)
{
    //密钥长度AES_128,加密方式ECB,填充方式ZERO
    QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB,                 QAESEncryption::ZERO);

    //使用QCryptographicHash对密钥进行加密
    QByteArray hashKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Sha1);

    //对源数据加密
    QByteArray encodedText = encryption.encode(data.toUtf8(), hashKey);

    //QByteArray转QString (toBase64()不能去掉)
    QString encodeTextStr = QString::fromLatin1(encodedText.toBase64());
    //qDebug()<< "encodedText:"<< encodeTextStr;

    return encodeTextStr;
}

//使用AES对数据进行解密
QString MainWindow::decodedText(QString data, QString key)
{
    //密钥长度AES_128,加密方式ECB,填充方式ZERO
    QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB,     QAESEncryption::ZERO);

    //使用QCryptographicHash对密钥进行加密
    QByteArray hashKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Sha1);

    //解密
    QByteArray decodedText = encryption.decode(QByteArray::fromBase64(data.toLatin1()), hashKey);

    //QByteArray转QString
    QString decodedTextStr = QString::fromLatin1(decodedText);
    //qDebug()<<"decodedText:"<< decodedTextStr;

    return decodedTextStr;
}
运行测试

不加fromBase64、toBase64时

相关推荐

  1. Django调用SECRET_KEY数据进行加密

    2023-12-21 12:00:08       29 阅读
  2. 如何使用PHP进行数据加密解密

    2023-12-21 12:00:08       57 阅读
  3. rust - 文件进行zip压缩加密

    2023-12-21 12:00:08       46 阅读
  4. rust - 文件夹进行zip压缩加密

    2023-12-21 12:00:08       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-21 12:00:08       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-21 12:00:08       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-21 12:00:08       87 阅读
  4. Python语言-面向对象

    2023-12-21 12:00:08       96 阅读

热门阅读

  1. QT 5.14.2 Android环境搭建问题解决

    2023-12-21 12:00:08       63 阅读
  2. log4j2 与 logback 条件判断

    2023-12-21 12:00:08       49 阅读
  3. Zookeeper-快速入门、服务搭建、集群搭建教程

    2023-12-21 12:00:08       60 阅读
  4. 打印⾃幂数

    2023-12-21 12:00:08       51 阅读
  5. Spring和Spring Boot的主要区别

    2023-12-21 12:00:08       55 阅读
  6. Linux中systemctl使用

    2023-12-21 12:00:08       63 阅读
  7. 嵌入式备赛:PWM控制及源代码解析

    2023-12-21 12:00:08       61 阅读
  8. Python列表详解

    2023-12-21 12:00:08       54 阅读
  9. 前端高频编程题

    2023-12-21 12:00:08       58 阅读