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

怎么追摩羯座 2024-06-28 09:35:03 阅读 64

一、说明

在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相关文件

https://github.com/bricke/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时



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。