Довольно легко реализовать это, загрузив
https://github.com/bricke/Qt-AES
и добавление файлов qaesencryption.h и qaesencryption.cpp в ваш проект, затем создайте класс контроллера, который может получить доступ к методам QAESEncryption и создайте несколько методов с типом Q_INVOKABLE для обработки шифрования, а затем откройте класс контроллера AES для вашего механизма QML
без проблем
aes.h
#ifndef AES_H
#define AES_H
#include
class AES : public QObject
{
Q_OBJECT
public:
explicit AES(QObject *parent = nullptr);
Q_INVOKABLE QVariant encrypt(QString plainText, QString key);
Q_INVOKABLE QVariant decrypt(QString encodedText, QString key);
signals:
public slots:
};
#endif // AES_H
aes.cpp
#include "aes.h"
#include "qaesencryption.h"
AES::AES(QObject *parent) : QObject(parent)
{
}
QVariant AES::encrypt(QString plainText, QString key)
{
QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB);
QByteArray encodedText = encryption.encode(plainText, key);
return QVariant::fromValue(encodedText);
}
QVariant AES::decrypt(QString encodedText, QString key)
{
QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB);
QByteArray decodedText = encryption.decode(encodedText, key);
return QVariant::fromValue(decodedText);
}
main.cpp
Вот где регистрировать тип QML
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include "aes.h"
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
/* register AES class into QML */
qmlRegisterType<AES>("com.myapp.demo", 1, 0, "AES");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
main.qml
import QtQuick 2.10
import QtQuick.Window 2.10
import com.myapp.demo 1.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
/* make an instance of AES */
AES {
id: aes
}
/* call invokable method */
Component.onCompleted: {
alert(aes.encrypt("testing encryption", "secretKey"))
}
}
Надеюсь, это поможет кому-то разобраться