MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtの基礎 - パケットのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtの基礎 - パケット
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <br><br> == SSLを使用した暗号化 == 以下の例では、OpenSSLライブラリとQTCPSocketクラスを使用して、パケットを暗号化して送信している。<br> <syntaxhighlight lang="c++"> #include <QTcpSocket> #include <QSslSocket> #include <QSslKey> #include <QSslCertificate> #include <QFile> // 暗号化 void encryptPacket(QByteArray &packet) { // OpenSSLライブラリの初期化 SSL_load_error_strings(); SSL_library_init(); // 公開鍵と秘密鍵を読み込む QSslKey privateKey("server.key", QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey); QSslCertificate publicKey("server.crt", QSsl::Pem); // QSslSocketオブジェクトの生成 QSslSocket socket; socket.setPrivateKey(privateKey); socket.setLocalCertificate(publicKey); socket.connectToHostEncrypted("example.com", 443); // パケットの暗号化 packet = socket.encrypt(packet); } int main() { // パケットの生成 QByteArray packet = "Hello, world!"; // パケットの暗号化 encryptPacket(packet); // 暗号化されたパケットの送信 QTcpSocket socket; socket.connectToHost("example.com", 1234); // ホスト名とTCPポート番号の指定 socket.write(packet); // 送信が完了するまで待機 socket.waitForBytesWritten(); return 0; } </syntaxhighlight> <br> 以下の例では、暗号化されたパケットを送信するために、TCPソケットとパケットデータを引数として受け取り、OpenSSLライブラリを使用してSSLセッションを確立して、パケットを暗号化して送信する。<br> SSLセッションは、<code>QSslSocket</code>クラスを使用して確立される。<br> <br> この時、事前に、サーバの証明書、クライアントの秘密鍵、サーバの公開鍵をファイルから読み込む必要がある。<br> <syntaxhighlight lang="c++"> #include <QTcpSocket> #include <QSslSocket> #include <QSslKey> #include <QSslCertificate> #include <QFile> void sendEncryptedPacket(QTcpSocket *socket, const QByteArray &packet) { // OpenSSLライブラリの初期化 SSL_load_error_strings(); SSL_library_init(); // SSLコンテキストを生成 SSL_CTX *ctx = SSL_CTX_new(TLSv1_2_client_method()); // サーバの証明書を読み込む QFile certFile("server.crt"); certFile.open(QIODevice::ReadOnly); QSslCertificate cert(certFile.readAll()); certFile.close(); SSL_CTX_use_certificate(ctx, cert.handle()); // クライアントの秘密鍵を読み込む QFile keyFile("client.key"); keyFile.open(QIODevice::ReadOnly); QSslKey key(keyFile.readAll(), QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey, "my passphrase"); keyFile.close(); SSL_CTX_use_PrivateKey(ctx, key.handle()); // サーバの公開鍵を読み込む QFile pubkeyFile("server.pub"); pubkeyFile.open(QIODevice::ReadOnly); QSslCertificate pubkey(pubkeyFile.readAll()); pubkeyFile.close(); SSL_CTX_add_extra_chain_cert(ctx, pubkey.handle()); // SSLセッションの確立 QSslSocket sslSocket; sslSocket.setSocketDescriptor(socket->socketDescriptor()); sslSocket.setProtocol(QSsl::TlsV1_2); sslSocket.setLocalCertificate(cert); sslSocket.setPrivateKey(key); sslSocket.addCaCertificate(pubkey); sslSocket.startClientEncryption(); // パケットの暗号化 QByteArray encryptedPacket = sslSocket.encrypt(packet); // 暗号化されたパケットの送信 socket->write(encryptedPacket); socket->flush(); socket->waitForBytesWritten(); // SSLセッションの終了 sslSocket.close(); } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:Qt]]
Qtの基礎 - パケット
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse