Шифрование QML и RSA - PullRequest
       6

Шифрование QML и RSA

0 голосов
/ 09 мая 2018

Привет. Я пытаюсь найти лучший способ создания открытых и закрытых ключей, используя только js и qml. Это также может включать шифрование и дешифрование сообщений между одноранговыми узлами.

Я нашел эту библиотеку: https://github.com/travist/jsencrypt/blob/master/bin/jsencrypt.js

Но проблема с использованием библиотек, которые были разработаны для браузера, заключается в том, что мне никогда не удавалось понять их с помощью

import filePath as JsRASCrypto

У кого-нибудь есть какие-либо рекомендации о том, как именно я мог бы заставить библиотеку, подобную этой, работать, или какие-либо другие способы, которыми я мог бы добиться этого?

Спасибо

1 Ответ

0 голосов
/ 24 мая 2018

Довольно легко реализовать это, загрузив 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"))
    }
}

Надеюсь, это поможет кому-то разобраться

...