したがって、ここで重要なデータを暗号化するのは開発者の習慣の問題です。
簡単な例でPGPを使用してみましょう。 もちろん、私たちのためにすべてを行う優れたQCAフレームワーク( http://delta.affinix.com/qca/ )が既にあります。 QCAの適切な使用方法を理解するだけです。
入力テキストを暗号化できるシンプルなデスクトップ拡張を作成しましょう。 すでにGnuPGをインストールし 、キーを生成し、受信者キーを受信し、 gpg-agentをインストールして構成し、 pinentry-qt / pinentry-gtkをインストールしてテスト済みであることを前提としています(はい、Linux上にあります)。 次に、 qcaとqca-gnupgをインストールする必要があります
emerge --ask qca qca-gnupg
Qt Creatorを実行し、Qt Guiアプリケーションを選択して、そこにqcaを追加します。
LIBS + = -L / usr / lib / qca2 -lqca INCLUDEPATH + = / usr / include / qca2 / QtCrypto
単純なフォームを作成し、ボタンを暗号化スロットに接続します。
main.cppで行う必要があるのは、QtCryptを初期化することだけです。
#include <QtCrypto> #include <QApplication> #include "CryptWin.h" int main(int argc、char * argv []){ QCA ::初期化子の初期化; QApplication a(argc、argv); Cryptwindow w; w.show(); return a.exec(); }
次に、ウィンドウデザイナーで、コンボボックスを初期化するために使用可能なすべてのキーのリストを取得します。
QCA :: KeyStoreManager :: start(); QCA :: KeyStoreManager ksm(this); ksm.waitForBusyFinished(); QCA :: KeyStore pgpks(QString( "qca-gnupg")、&ksm); foreach(const QCA :: KeyStoreEntry kse、pgpks.entryList()){ QString text = kse.name()+ "" + kse.id(); QVariant v; v.setValue(kse); ui-> cb_to-> addItem(text、v); if(!kse.pgpSecretKey()。isNull()) ui-> cb_my-> addItem(text、v); }
最初の(上の)コンボボックスは、秘密の部分を持つすべてのキー( 送信者 )を受け取り、2番目の(下の)コンボボックスは、公開部分を持つすべてのキー- 受信者を受け取ります。 addItem()へのQVariantデータ引数を使用して、キーをコンボボックス要素に埋め込みます。
「暗号化」ボタン用のスロットのみを書き込むことは残ります。
void CryptWindow :: encrypt(){ QVariant v_my = ui-> cb_my-> itemData(ui-> cb_my-> currentIndex()); QVariant v_to = ui-> cb_to-> itemData(ui-> cb_to-> currentIndex()); if(!v_my.isValid()){ui-> pte_dst-> setPlainText( "Invalid src"); 帰る } if(!v_to.isValid()){ui-> pte_dst-> setPlainText( "Invalid dst"); 帰る } QCA :: KeyStoreEntry kse_my = v_my.value <QCA :: KeyStoreEntry>(); QCA :: KeyStoreEntry kse_to = v_to.value <QCA :: KeyStoreEntry>(); QCA :: SecureMessageKey to; to.setPGPSecretKey(kse_my.pgpSecretKey()); to.setPGPPublicKey(kse_to.pgpPublicKey()); QCA :: OpenPGP pgp; QCA :: SecureMessage msg(&pgp); msg.setRecipient(to); msg.setFormat(QCA :: SecureMessage :: Ascii); msg.startEncrypt(); msg.update(ui-> pte_src-> toPlainText()。toUtf8()); msg.end(); msg.waitForFinished(2000); QByteArray crpt = msg.read(); ui-> pte_dst-> setPlainText(QString :: fromUtf8(crpt)); }
アプリケーションを実行してテストしてみましょう(ちなみに、 gpg-agentを介して、選択した秘密鍵のパスワードを要求するため、最初にpinentryの動作を確認することが重要です)。
かなり簡単ですね。 暗号化されています!
(すべてのアプリケーションソースを含む英語版: lynxline.com/qt-and-use-of-cryptography-simple )