12,925
回編集
187行目: | 187行目: | ||
== Qt AESライブラリ == | == Qt AESライブラリ == | ||
以下の例では、Qt | ==== 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 " | #include "qaesencryption.h" | ||
// AESによるデータの暗号化 | |||
QString Encrypt(QString data, QString key) | |||
{ | { | ||
QAESEncryption encryption(QAESEncryption:: | // 鍵長128ビット, ECBモード, ゼロパディング | ||
QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB, QAESEncryption::ZERO); | |||
// QCryptographicHashによる鍵の暗号化 | |||
QByteArray hashKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Sha1); | |||
// データの暗号化 | |||
QByteArray | QByteArray encodedText = encryption.encode(data.toUtf8(), hashKey); | ||
// QByteArrayからQStringへ変換 | |||
// toBase64関数は削除できない | |||
QString encodeTextStr = QString::fromLatin1(encodedText.toBase64()); | |||
return; | return encodeTextStr; | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
以下の例では、Qt | 以下の例では、Qt AESライブラリを使用して、鍵長128[bit]のECBモードで復号している。<br> | ||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
#include <QCryptographicHash> | #include <QCryptographicHash> | ||
#include " | #include "qaesencryption.h" | ||
// Qt AESライブラリを使用したデータの復号 | |||
QString decodedText(QString data, QString key) | |||
{ | { | ||
QAESEncryption encryption(QAESEncryption:: | // 鍵長128ビット, ECBモード, ゼロパディング | ||
QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB, QAESEncryption::ZERO); | |||
QByteArray hashKey = QCryptographicHash::hash(key. | // QCryptographicHashによる鍵の暗号化 | ||
QByteArray hashKey = QCryptographicHash::hash(key.toUtf8(), QCryptographicHash::Sha1); | |||
QByteArray | // データの復号 | ||
QByteArray decodedText = encryption.decode(QByteArray::fromBase64(data.toLatin1()), hashKey); | |||
QString | // QByteArrayからQStringへ変換 | ||
QString decodedTextStr = QString::fromLatin1(decodedText); | |||
return; | return decodedTextStr; | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Qt]] | [[カテゴリ:Qt]] |