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

ナビゲーションに移動 検索に移動
187行目: 187行目:


== Qt AESライブラリ ==
== Qt AESライブラリ ==
以下の例では、Qt AESライブラリを使用して、鍵長256[bit]のCBCモードで暗号化している。<br>
==== Qt AESライブラリとは ====
Qt向けのポータブルなAES暗号化ライブラリである。<br>
128 / 192 / 256ビットの鍵長をサポートしており、ECB、CBC、CFB、OFBモードおよび部分的なAES-NIをサポートしている。<br>
<br>
Qt AESライブラリはフリーライセンスであり、商用 / 非商用を問わず、自由に使用、改変、販売してもよい。<br>
また、ソースコードの公開義務も無い。<br>
<br>
そのため、Qtの実行バイナリまたはQtプロジェクトにおいて、Qt AESライブラリを同梱して配布してもよい。<br>
<br>
==== Qt AESライブラリのダウンロード ====
[https://github.com/bricke/Qt-AES Qt AESクラスのGuthub]にアクセスして、ソースコードをダウンロードする。<br>
<br>
Qt AESライブラリのビルドに必要なライブラリをインストールする。<br>
# SUSE
sudo zypper install make cmake gcc gcc-c++ \
                    qt6-core-devel    # Qt 6を使用する場合
                    qt6-test-devel    # Qt AESライブラリのテストを行う場合 (Qt 6を使用する場合)
                    libQt5Core-devel  # Qt 5を使用する場合
                    libQt5Test-devel  # Qt AESライブラリのテストを行う場合 (Qt 5を使用する場合)
<br>
Qt AESライブラリをビルドおよびインストールする。<br>
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=<Qt AESライブラリのインストールディレクトリ> ..
make -j $(nproc)
make install
<br>
==== Qt AESライブラリのサンプルコード ====
Qt AESライブラリを使用するには、Qt Coreライブラリが必要となる。<br>
また、テストを行う場合は、Qt Testライブラリも必要となる。<br>
<br>
以下の例では、Qt AESライブラリを使用して、鍵長128[bit]のECBモードで暗号化している。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  #include <QCryptographicHash>
  #include <QCryptographicHash>
  #include "QAESEncryption.h"
  #include "qaesencryption.h"
   
   
  void Encrypt(const QString &plainText)
  // AESによるデータの暗号化
QString Encrypt(QString data, QString key)
  {
  {
     QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::CBC);
    // 鍵長128ビット, ECBモード, ゼロパディング
     QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB, QAESEncryption::ZERO);
   
   
     QString key("your-string-key");  // AES256は32[byte]の鍵長
     // QCryptographicHashによる鍵の暗号化
     QString iv("your-IV-vector");   // AESのブロックサイズは16[byte]の固定長のため、初期化ベクトルも16[byte]
     QByteArray hashKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Sha1);
   
   
     QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
     // データの暗号化
     QByteArray hashIV  = QCryptographicHash::hash(iv.toLocal8Bit(), QCryptographicHash::Md5);
     QByteArray encodedText = encryption.encode(data.toUtf8(), hashKey);
   
   
     QByteArray encodeText = encryption.encode(plainText.toLocal8Bit(), hashKey, hashIV);
     // QByteArrayからQStringへ変換
    // toBase64関数は削除できない
    QString encodeTextStr = QString::fromLatin1(encodedText.toBase64());
   
   
     return;
     return encodeTextStr;
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
以下の例では、Qt AESライブラリを使用して、鍵長256[bit]のCBCモードで復号している。<br>
以下の例では、Qt AESライブラリを使用して、鍵長128[bit]のECBモードで復号している。<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  #include <QCryptographicHash>
  #include <QCryptographicHash>
  #include "QAESEncryption.h"
  #include "qaesencryption.h"
   
   
  void Decrypt(const QByteArray &encodeText)
  // Qt AESライブラリを使用したデータの復号
QString decodedText(QString data, QString key)
  {
  {
     QAESEncryption encryption(QAESEncryption::AES_256, QAESEncryption::CBC);
    // 鍵長128ビット, ECBモード, ゼロパディング
     QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB, QAESEncryption::ZERO);
    QString key("your-string-key");  // 暗号化と同じ鍵
    QString iv("your-IV-vector");    // 暗号化と同じ初期化ベクトル
   
   
     QByteArray hashKey = QCryptographicHash::hash(key.toLocal8Bit(), QCryptographicHash::Sha256);
    // QCryptographicHashによる鍵の暗号化
    QByteArray hashIV  = QCryptographicHash::hash(iv.toLocal8Bit(), QCryptographicHash::Md5);
     QByteArray hashKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Sha1);
   
   
     QByteArray decodeText = encryption.decode(encodeText, hashKey, hashIV);
    // データの復号
     QByteArray decodedText = encryption.decode(QByteArray::fromBase64(data.toLatin1()), hashKey);
   
   
     QString decodedString = QString(encryption.removePadding(decodeText));
    // QByteArrayからQStringへ変換
     QString decodedTextStr = QString::fromLatin1(decodedText);
   
   
     return;
     return decodedTextStr;
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:Qt]]
[[カテゴリ:Qt]]

案内メニュー