Qt实现数据进行加密、解密的步骤
作者:怎么追摩羯座
本文主要介绍了Qt实现数据进行加密、解密的步骤,包含QCryptographicHash和Qt-AES两种库的实现,具有一定的参考价值,感兴趣的可以了解一下
一、说明
在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时
到此这篇关于Qt实现数据进行加密、解密的步骤的文章就介绍到这了,更多相关Qt 加密解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!