QT : AES-256-CBC Crypter/Décrypter en C++ selon le code PHP

Jiri Zaloudek

J'ai un code PHP simple pour le chiffrement/description AES-256-CBC :

function safeEncrypt($token) {
    $enc_iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length("aes-256-cbc"));
    return openssl_encrypt($token, "aes-256-cbc", "passToCrypt", 0, $enc_iv) . "::" . bin2hex($enc_iv);
}
function safeDecrypt($token) {
    $enc_iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length("aes-256-cbc"));
    list($token, $enc_iv) = explode("::", $token);
    return openssl_decrypt($token, "aes-256-cbc", "passToCrypt", 0, hex2bin($enc_iv));
}

et je cherche la MÊME méthode pour c++ dans l'application QML. Jusqu'à présent, j'ai ceci (je ne sais pas comment gérer l'IV)

cryptage.h :

#ifndef CRYPTION_H
#define CRYPTION_H

#include <QObject>
#include <QCryptographicHash>

class Cryption : public QObject
{
    Q_OBJECT
public:
    explicit Cryption(QObject *parent = nullptr);
    Q_INVOKABLE QString encrypt(QString strToEncrypt);
    Q_INVOKABLE QString decrypt(QString strToDecrypt);

private:
    QString method;
    QString key;
    QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::CBC);

signals:

public slots:

};

#endif // CRYPTION_H

cryptage.cpp :

#include "cryption.h"
#include <QCryptographicHash>

Cryption::Cryption(QObject *parent) :
    QObject(parent)
{
    // Main Settings
    method = "aes-256-cbc";
    key = "passToCrypt";
}

QString Cryption::encrypt(QString strToEncrypt)
{
    QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
//  QByteArray hashIV = QCryptographicHash::hash(iv.toLocal8Bit(), QCryptographicHash::Md5);

    QByteArray encodeText = encryption.encode(strToEncrypt.toLocal8Bit(), hashKey, hashIV);
    return encodeText;
}

QString Cryption::decrypt(QString strToEncrypt)
{
    QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
//  QByteArray hashIV = QCryptographicHash::hash(iv.toLocal8Bit(), QCryptographicHash::Md5);

    QByteArray decodeText = encryption.decode(encodeText, hashKey, hashIV);
    QString decodedString = QString(encryption.removePadding(decodeText));
    return decodedString;
}

pouvez-vous m'aider à le finir s'il vous plait ? L'essentiel est que je ne sais pas comment gérer l'IV comme le fait PHP (un nombre aléatoire, hex2bin) et l'IV est enregistré dans la chaîne encodée (ENCODED_STRING::USED_IV) afin que l'IV puisse être utilisé plus tard pour le décodage

Ancien contributeur

Dans votre code PHP, le vecteur d'initialisation (IV) est généré avec un générateur de nombres aléatoires. Vous pouvez faire la même chose avec Qt. Par exemple:

QByteArray iv = QByteArray(16, 0);
for(int i=0; i<16; ++i) {
    iv[i] = static_cast<char>(QRandomGenerator::system()->bounded(255));
}

Au lieu de cela, l' exemple que vous suivez crée une chaîne avec n'importe quel texte arbitraire, puis en calcule un hachage MD5. L'utilisation de la méthode ci-dessus est plus directe, mais vous pouvez faire de même ou générer une chaîne aléatoire avant de calculer le hachage.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Décrypter le fichier crypté en utilisant openssl avec aes-cbc-256

Convertir de Java en C # - Décrypter CBC-AES-256 avec PKCS5Padding

Cryptage incorrect (QT c++ OpenSSL AES 256 CBC)

Calculez le CBC-MAC avec AES-256 et openssl en C

Comment décrypter C ++ le AES Rijndael CBC en utilisant correctement Kotlin?

Crypter le texte en AES / CBC / PKCS7Padding

OpenSSL AES 256 CBC via l'API EVP en C

Décrypter le fichier encodé aes-256-cbc avec iv = 0

AES-256-CBC en Java

Android équivalent à AES-256-CBC-HMAC-SHA256 en PHP

Décrypter PHP AES-256-CFB en Java

Décrypter AES 256 CBC par crypto-js

Le cryptage AES-256-CBC ne correspond pas entre golang et node / php

Convertir le code de cryptage .net aes256 en PHP

AES-256-CBC crypté avec PHP et décrypté en Java

Comment répliquer l'aes-256-cbc de MySQL en PHP

Flutter / Dart AES-256-CBC décryptage à partir du cryptage en PHP

Implémenter Php open_ssl_decrypt AES 256 CBC en tant que CryptoJS

Décrypter AES CBC en python à partir d'OpenSSL AES

Comment décrypter le fichier crypté AES CBC en connaissant uniquement la longueur de la clé

Le texte chiffré AES256-CBC de BouncyCastle déchiffre en Colombie-Britannique, mais PHP openssl_decrypt échoue avec les mêmes entrées

Impossible d'échanger AES-256-CBC / PKCS7 entre C # bouncycastle et PHP openssl

java AES / CBC / PKCS5PADDING en php (AES-256-CBC) résultant d'un résultat différent

Le cryptage AES-256 CBC réussit dans Ruby / PHP, mais le décryptage échoue avec CryptoJS

Comment crypter et décrypter en utilisant AES CBC 256bit et PKCS5Padding dans Dart et également récupérer des paramètres

How to replicate MySQL's aes-256-cbc in PHP

comment décrypter en php un texte chiffré par python en utilisant AES-256-CCM

Déchiffrez les données en Java à partir du chiffrement AES-256-CBC personnalisé en PHP

Décrypter en morceaux un objet crypté AES 128 CBC

TOP liste

  1. 1

    comment afficher un bouton au-dessus d'un autre élément ?

  2. 2

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  3. 3

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

  4. 4

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  5. 5

    Conversion double en BigDecimal en Java

  6. 6

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Passer la taille d'un tableau 2D à une fonction ?

  9. 9

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  10. 10

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  11. 11

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  12. 12

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  13. 13

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  14. 14

    Exporter la table de l'arborescence vers CSV avec mise en forme

  15. 15

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  16. 16

    Créer un système Buzzer à l'aide de python

  17. 17

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  18. 18

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  19. 19

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  20. 20

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  21. 21

    Microsoft.WebApplication.targets

chaudétiquette

Archive