亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Qt實(shí)現(xiàn)數(shù)據(jù)進(jìn)行加密、解密的步驟

 更新時(shí)間:2024年03月11日 15:34:36   作者:怎么追摩羯座  
本文主要介紹了Qt實(shí)現(xiàn)數(shù)據(jù)進(jìn)行加密、解密的步驟,包含QCryptographicHash和Qt-AES兩種庫(kù)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下

一、說(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)方式

    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-04
  • pcre函數(shù)詳細(xì)解析

    pcre函數(shù)詳細(xì)解析

    PCRE提供了19個(gè)接口函數(shù),為了簡(jiǎn)單介紹,使用PCRE內(nèi)帶的測(cè)試程序(pcretest.c)示例用法
    2013-09-09
  • Qt實(shí)現(xiàn)轉(zhuǎn)動(dòng)輪播圖

    Qt實(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)題

    詳解C++類的成員函數(shù)做友元產(chǎn)生的循環(huán)依賴問(wèn)題

    這篇文章主要為大家詳細(xì)介紹了C++類的成員函數(shù)做友元產(chǎn)生的循環(huán)依賴問(wèn)題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • C++?用紅黑樹模擬實(shí)現(xiàn)set、map的示例代碼

    C++?用紅黑樹模擬實(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-03
  • C語(yǔ)言實(shí)現(xiàn)維吉尼亞密碼的示例代碼

    C語(yǔ)言實(shí)現(xiàn)維吉尼亞密碼的示例代碼

    維吉尼亞密碼(又譯維熱納爾密碼)是使用一系列凱撒密碼組成密碼字母表的加密算法,屬于多表密碼的一種簡(jiǎn)單形式。本文將用C語(yǔ)言實(shí)現(xiàn)維吉尼亞密碼,需要的可以參考一下
    2022-11-11
  • C++日志記錄類實(shí)例解析

    C++日志記錄類實(shí)例解析

    這篇文章主要介紹了C++日志記錄類實(shí)例,代碼功能非常實(shí)用,需要的朋友可以參考下
    2014-07-07
  • C++中vector迭代器失效與深淺拷貝問(wèn)題詳析

    C++中vector迭代器失效與深淺拷貝問(wèn)題詳析

    迭代器失效就是迭代器底層對(duì)應(yīng)指針?biāo)赶虻目臻g倍銷毀了,導(dǎo)致使用了一塊已經(jīng)被釋放了的空間,下面這篇文章主要給大家介紹了C++中vector迭代器失效與深淺拷貝問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • C++設(shè)計(jì)模式之訪問(wèn)者模式

    C++設(shè)計(jì)模式之訪問(wèn)者模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之訪問(wèn)者模式,本文講解了什么是訪問(wèn)者模式、訪問(wèn)者模式的UML類圖、訪問(wèn)者模式的實(shí)現(xiàn)代碼等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C++?中IO流詳解

    C++?中IO流詳解

    這篇文章主要介紹了C++?IO流的相關(guān)知識(shí)點(diǎn),文中有詳細(xì)的代碼,希望可以幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2023-05-05

最新評(píng)論