「Qtの応用 - AES」の版間の差分

ナビゲーションに移動 検索に移動
618行目: 618行目:
   
   
       return iv;
       return iv;
    }
    static bool encryptFile(const QString &inputFilename, const QString &outputFilename, const QByteArray &key, QByteArray &iv) {
      try {
          CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption encryptor;
          encryptor.SetKeyWithIV(reinterpret_cast<const byte*>(key.constData()), key.size(), reinterpret_cast<const byte*>(iv.constData()));
          CryptoPP::FileSource(inputFilename.toStdString().c_str(), true,
                              new CryptoPP::StreamTransformationFilter(encryptor, new CryptoPP::FileSink(outputFilename.toStdString().c_str())));
          return true;
      }
      catch (const CryptoPP::Exception& e) {
          qCritical() << "File encryption error:" << e.what();
          return false;
      }
    }
    static bool decryptFile(const QString &inputFilename, const QString &outputFilename, const QByteArray &key, const QByteArray &iv)
    {
      try {
          CryptoPP::CBC_Mode<CryptoPP::AES>::Decryption decryptor;
          decryptor.SetKeyWithIV(reinterpret_cast<const byte*>(key.constData()), key.size(), reinterpret_cast<const byte*>(iv.constData()));
          CryptoPP::FileSource(inputFilename.toStdString().c_str(), true,
                              new CryptoPP::StreamTransformationFilter(decryptor, new CryptoPP::FileSink(outputFilename.toStdString().c_str())));
          return true;
      }
      catch (const CryptoPP::Exception& e) {
          qCritical() << "File decryption error:" << e.what();
          return false;
      }
     }
     }
   
   
686行目: 719行目:
       QDataStream in(&file);
       QDataStream in(&file);
       in >> iv >> data;
       in >> iv >> data;
      file.close();
      return true;
    }
    static bool saveIV(const QString &filename, const QByteArray &iv)
    {
      QFile file(filename);
      if (!file.open(QIODevice::WriteOnly)) {
          qCritical() << "Unable to open file for writing IV:" << filename;
          return false;
      }
      QDataStream out(&file);
      out << iv;
      file.close();
      return true;
    }
    static bool loadIV(const QString &filename, QByteArray &iv)
    {
      QFile file(filename);
      if (!file.open(QIODevice::ReadOnly)) {
          qCritical() << "Unable to open file for reading IV:" << filename;
          return false;
      }
      QDataStream in(&file);
      in >> iv;
   
   
       file.close();
       file.close();
721行目: 786行目:
     qDebug() << "Encryption key:" << key.toHex();
     qDebug() << "Encryption key:" << key.toHex();
   
   
     // テスト用のデータ
     // 入力ファイルと出力ファイルの設定
     QByteArray plaintext = "Hello, World! This is a secret message.";
     QString inputFilename = "input.txt";
     qDebug() << "Original text:" << plaintext;
     QString encryptedFilename = "encrypted.bin";
    QString decryptedFilename = "decrypted.txt";
    QString ivFilename = "iv.bin";
   
   
     // 暗号化
     // 平文を暗号化
     QByteArray iv = SecureAESCrypto::generateIV();
     QByteArray iv = SecureAESCrypto::generateIV();
     QByteArray ciphertext = SecureAESCrypto::encrypt(plaintext, key, iv);
     if (SecureAESCrypto::encryptFile(inputFilename, encryptedFilename, key, iv)) {
    if (!ciphertext.isEmpty()) {
       qDebug() << "File encrypted successfully.";
       qDebug() << "Encrypted text:" << ciphertext.toHex();
   
   
       // 暗号化されたデータとIVの保存
       // 初期化ベクトル (IV) の保存
       if (SecureAESCrypto::saveEncryptedData("encrypted_data.bin", ciphertext, iv)) {
       if (SecureAESCrypto::saveIV(ivFilename, iv)) {
           qDebug() << "Encrypted data and IV saved successfully.";
           qDebug() << "IV saved successfully.";
   
   
           // 暗号化されたデータとIVの読み込み
           // 初期化ベクトル (IV) の読み込み
           QByteArray loadedCiphertext, loadedIV;
           QByteArray loadedIV;
           if (SecureAESCrypto::loadEncryptedData("encrypted_data.bin", loadedCiphertext, loadedIV)) {
           if (SecureAESCrypto::loadIV(ivFilename, loadedIV)) {
             qDebug() << "Encrypted data and IV loaded successfully.";
             qDebug() << "IV loaded successfully.";
   
   
             // 復号
             // 復号
             QByteArray decryptedText = SecureAESCrypto::decrypt(loadedCiphertext, key, loadedIV);
             if (SecureAESCrypto::decryptFile(encryptedFilename, decryptedFilename, key, loadedIV)) {
            if (!decryptedText.isEmpty()) {
                 qDebug() << "File decrypted successfully.";
                 qDebug() << "Decrypted text:" << decryptedText;
             }
             }
             else {
             else {
                 qDebug() << "Decryption failed.";
                 qDebug() << "File decryption failed.";
             }
             }
           }
           }
           else {
           else {
             qDebug() << "Failed to load encrypted data and IV.";
             qDebug() << "Failed to load IV.";
           }
           }
       }
       }
       else {
       else {
           qDebug() << "Failed to save encrypted data and IV.";
           qDebug() << "Failed to save IV.";
       }
       }
     }
     }
     else {
     else {
        qDebug() << "Encryption failed.";
      qDebug() << "File encryption failed.";
     }
     }
   
   

案内メニュー