Qt實(shí)現(xiàn)數(shù)據(jù)進(jìn)行加密、解密的步驟
一、說(shuō)明
在Qt項(xiàng)目中簡(jiǎn)單的對(duì)數(shù)據(jù)進(jìn)行加密解密,有如下兩種方式
1、QCryptographicHash
Qt提供了用于加密的類QCryptographicHash,但是QCryptographicHash類只有加密功能,沒有解密功能
2、Qt-AES
使用第三方AES庫(kù),對(duì)數(shù)據(jù)進(jìn)行加密解密
二、使用QCryptographicHash
新建一個(gè)Qt項(xiàng)目,基類選擇QMainWindow,
在界面上拖拽如下兩個(gè)控件,并進(jìn)行布局
更改.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); //添加數(shù)據(jù) QByteArray retArray = hash.result(); //加密后的數(shù)據(jù) qDebug() << retArray.toHex(); //轉(zhuǎn)化成16進(jìn)制 }
運(yùn)行,隨意輸入一下數(shù)據(jù),如:123abc,點(diǎn)擊pushButton
三、使用Qt-AES
訪問(wèn)下面的鏈接,下載Qt-AES相關(guān)文件
https://github.com/bricke/Qt-AES
創(chuàng)建一個(gè)Qt項(xiàng)目,基類選擇“QMainWindow”,把qaesencryption.h和qaesencryption.cpp兩個(gè)文件添加到項(xiàng)目中
更改.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"; //要加密的數(shù)據(jù) QString key = "9876543"; //密鑰 QString encoded = encodedText(data, key); //加密 QString decoded = decodedText(encoded, key); //解密· qDebug() << "源數(shù)據(jù):" << data; qDebug() << "加密:" << encoded; qDebug() << "解密:" << decoded; } MainWindow::~MainWindow() { delete ui; } //使用AES對(duì)數(shù)據(jù)進(jìn)行加 密 QString MainWindow::encodedText(QString data, QString key) { //密鑰長(zhǎng)度AES_128,加密方式ECB,填充方式ZERO QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB, QAESEncryption::ZERO); //使用QCryptographicHash對(duì)密鑰進(jìn)行加密 QByteArray hashKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Sha1); //對(duì)源數(shù)據(jù)加密 QByteArray encodedText = encryption.encode(data.toUtf8(), hashKey); //QByteArray轉(zhuǎn)QString (toBase64()不能去掉) QString encodeTextStr = QString::fromLatin1(encodedText.toBase64()); //qDebug()<< "encodedText:"<< encodeTextStr; return encodeTextStr; } //使用AES對(duì)數(shù)據(jù)進(jìn)行解密 QString MainWindow::decodedText(QString data, QString key) { //密鑰長(zhǎng)度AES_128,加密方式ECB,填充方式ZERO QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB, QAESEncryption::ZERO); //使用QCryptographicHash對(duì)密鑰進(jìn)行加密 QByteArray hashKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Sha1); //解密 QByteArray decodedText = encryption.decode(QByteArray::fromBase64(data.toLatin1()), hashKey); //QByteArray轉(zhuǎn)QString QString decodedTextStr = QString::fromLatin1(decodedText); //qDebug()<<"decodedText:"<< decodedTextStr; return decodedTextStr; }
運(yùn)行測(cè)試
不加fromBase64、toBase64時(shí)
到此這篇關(guān)于Qt實(shí)現(xiàn)數(shù)據(jù)進(jìn)行加密、解密的步驟的文章就介紹到這了,更多相關(guān)Qt 加密解密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt模仿Windows文件夾縮略圖的三種實(shí)現(xiàn)方式
本文講的不是簡(jiǎn)單的model/view或者widget的或者QML的基礎(chǔ)框架實(shí)現(xiàn),而是在這些框架之上的肉(文件夾縮略圖)的效果實(shí)現(xiàn),本文將以QWidget、Qt Quick(QML)、以及QGraph三種實(shí)現(xiàn)方式來(lái)講解,如何做出和Windows類似的縮略圖,需要的朋友可以參考下2024-04-04Qt實(shí)現(xiàn)轉(zhuǎn)動(dòng)輪播圖
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)轉(zhuǎn)動(dòng)輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06詳解C++類的成員函數(shù)做友元產(chǎn)生的循環(huán)依賴問(wèn)題
這篇文章主要為大家詳細(xì)介紹了C++類的成員函數(shù)做友元產(chǎn)生的循環(huán)依賴問(wèn)題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03C++?用紅黑樹模擬實(shí)現(xiàn)set、map的示例代碼
set、map的底層結(jié)構(gòu)是紅黑樹,它們的函數(shù)通過(guò)調(diào)用紅黑樹的接口來(lái)實(shí)現(xiàn),本文主要介紹了C++?用紅黑樹模擬實(shí)現(xiàn)set、map,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03C語(yǔ)言實(shí)現(xiàn)維吉尼亞密碼的示例代碼
維吉尼亞密碼(又譯維熱納爾密碼)是使用一系列凱撒密碼組成密碼字母表的加密算法,屬于多表密碼的一種簡(jiǎn)單形式。本文將用C語(yǔ)言實(shí)現(xiàn)維吉尼亞密碼,需要的可以參考一下2022-11-11