Qt рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛

рдЪреВрдВрдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рдВрдЪрд╛рд░ рдПрдирдПрд╕рдП рдХреЗ рд╕рд╛рдерд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рджреЗрдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рднреА рд╕рдВрдЪрд╛рд░реЛрдВ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ Qt рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдкреАрдЬреАрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред

рддреЛ рдпрд╣рд╛рдБ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░ рдХреА рдЖрджрдд рдХреА рдмрд╛рдд рд╣реИред

рддреЛ рдЪрд▓рд┐рдП рдЕрдкрдиреЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ PGP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдХреНрдпреВрд╕реАрдП рдврд╛рдВрдЪрд╛ рд╣реИ ( http://delta.affinix.com/qca/ ) рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд░реЗрдЧрд╛ред рд╣рдореЗрдВ рдХреЗрд╡рд▓ QCA рдХреЗ рдЙрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдПрдВ рдЬреЛ рдЗрдирдкреБрдЯ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╣реА GnuPG рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдЙрддреНрдкрдиреНрди рдХреБрдВрдЬрд┐рдпрд╛рдБ, рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХреА, рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ gpg- рдПрдЬреЗрдВрдЯ , рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдкрд░реАрдХреНрд╖рдг pinentry-qt / pinentry-gtk (рд╣рд╛рдБ, рд╣рдо рд▓рд┐рдирдХреНрд╕ рдкрд░ рд╣реИрдВ)ред рдлрд┐рд░ рд╣рдореЗрдВ qca рдФрд░ qca-gnupg рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

emerge --ask qca qca-gnupg

Qt рдирд┐рд░реНрдорд╛рддрд╛ рдмрдирд╛рдПрдБ, Qt Gui рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪреБрдиреЗрдВ, рд╡рд╣рд╛рдБ qca рдЬреЛрдбрд╝реЗрдВ:
 LIBS + = -L / usr / lib / qca2 -lqca
 INCLUDEPATH + = / usr / рд╢рд╛рдорд┐рд▓ / qca2 / QtCrypto

рдПрдХ рд╕рд░рд▓ рдлрд╝реЙрд░реНрдо рдмрдирд╛рдПрдВ, рдмрдЯрди рдХреЛ рд╣рдорд╛рд░реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд▓реЙрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ:

Main.cpp рдореЗрдВ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ QtCrypt рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ:
 #include <QtCrypto>
 #include <QApplication>
 # рдЬрд╛рд░реА рдХрд░реЗрдВ "CryptWin.h"
 int main (int argc, char * argv []) {
	 QCA :: рдЗрдирд┐рд╢рд┐рдпрд▓ рдЗрдирд┐рдЯ;
	 QApplication a (argc, argv);
	 рдХреНрд░рд┐рдкреНрдЯреЛрд╡рд┐рдВрдбреЛ рдбрдмреНрд▓реНрдпреВ;
	 w.show ();
	 рд╡рд╛рдкрд╕реА a.exec ();
 }


рдлрд┐рд░ рд╡рд┐рдВрдбреЛ рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рдореЗрдВ рд╣рдореЗрдВ рдХреЙрдореНрдмреЛ рдмреЙрдХреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЙрдкрд▓рдмреНрдз рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИ:
	 QCA :: KeyStoreManager :: start ();
	 QCA :: KeyStoreManager ksm (рдпрд╣);
	 ksm.waitForBusyFinished ();

	 QCA :: KeyStore pgpks (QString ("qca-gnupg"), & ksm);

	 foreach (const QCA :: KeyStoreEntry kse, pgpks.entryList ()) {
		 QString рдкрд╛рда = kse.name () + "" + kse.id ();
		 QVariant v;  v.setValue (kse);
		 ui-> cb_to-> addItem (рдкрд╛рда, рд╡реА);
		 рдЕрдЧрд░ (kse.pgpSecretKey ()ред isNull ())
			 ui-> cb_my-> addItem (рдкрд╛рда, рд╡реА);
	 }

рдкрд╣рд▓рд╛ (рдКрдкрд░реА) рдХреЙрдореНрдмреЛ рдмреЙрдХреНрд╕ рдЙрди рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдЬрд┐рдирдореЗрдВ рдПрдХ рдЧреБрдкреНрдд рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ - рдкреНрд░реЗрд╖рдХ , рджреВрд╕рд░рд╛ (рдирд┐рдЪрд▓рд╛) рдХреЙрдореНрдмреЛ рдмреЙрдХреНрд╕ рдЙрди рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рднрд╛рдЧ рд╣реИ - рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ ред рд╣рдо AddItem () рдХреЗ рд▓рд┐рдП QVariant рдбреЗрдЯрд╛ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдпрдВ рдХреЛ рдХреЙрдореНрдмреЛрдмреЙрдХреНрд╕ рддрддреНрд╡реЛрдВ рдореЗрдВ рдХреБрдВрдЬреА рдПрдореНрдмреЗрдб рдХрд░реЗрдВрдЧреЗред

рдпрд╣ "рдПрдирдХреНрд░рд┐рдкреНрдЯ" рдмрдЯрди рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕реНрд▓реЙрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ:
 рд╢реВрдиреНрдп рдХреНрд░рд┐рдкреНрдЯрд╡рд┐рдВрдбреЛ :: рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ () {
	 QVariant v_my = ui-> cb_my-> itemData (ui-> cb_my-> currentIndex ());
	 QVariant v_to = ui-> cb_to-> itemData (ui-> cb_to-> currentIndex ());
	 рдЕрдЧрд░ (v_my.isValid ()) {ui-> pte_dst-> setPlainText ("рдЕрдорд╛рдиреНрдп src");  рд╡рд╛рдкрд╕реА;  }
	 рдЕрдЧрд░ (v_to.isValid ()) {ui-> pte_dst-> setPlainText ("рдЕрдорд╛рдиреНрдп dst");  рд╡рд╛рдкрд╕реА;  }
	 QCA :: KeyStoreEntry kse_my = v_my.value <QCA :: KeyStoreEntry> ();
	 QCA :: KeyStoreEntry kse_to = v_to.value <QCA :: KeyStoreEntry> ();

	 QCA :: SecureMessageKey рдХреЛ;
	 ред insetPGPSecretKey (kse_my.pgpSecretKey ());
	 ред insetPGPPublicKey (kse_to.pgpPublicKey ());

	 QCA :: OpenPGP pgp;
	 QCA :: SecureMessage msg (& pgp);

	 msg.setRecipient (рдХреЛ);
	 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- рдПрдЬреЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рдЪрдпрдирд┐рдд рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХреЗ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдкреВрдЫреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рдкрд┐рдиреЗрдВрдЯреНрд░реА рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ):



рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рд╣реИ рдирд╛? рд╣рдо рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╣реИрдВ!

(рд╕рднреА рдЖрд╡реЗрджрди рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рдВрд╕реНрдХрд░рдг: lynxline.com/qt-and-use-of-cryptography-simple )

Source: https://habr.com/ru/post/In193742/


All Articles