היי יקרה,
אני לא מומחית בנושא אבל אנסה לענות, אולי גם @etassa תדע לעזור.
אם נלך C++ , אז את יכולה להשתמש באחת משלושת השיטות האלו
- להשתמש בספריית SSL, כמו OpenSSL, כדי ליצור חיבור מאובטח בין שני המחשבים ולשלוח את הנתונים דרך החיבור הזה.
- להשתמש בפרוטוקול Transport Layer Security (TLS) כדי לאבטח את התקשורת בין שני המחשבים. את יכולה להשתמש בספרייה כמו Boost.Asio כדי ליישם את זה.
- להשתמש בספריית ההצפנה ב-C++, כמו Crypto++, כדי להצפין את הנתונים לפני שליחתם ברשת ולפענח אותם לאחר קבלתם.
לא משנה מה תבחרי, חשוב לוודא שהיישום פועל לפי שיטות עבודה שמוקבלות ומומלצות לאבטחת מידע, כמו שימוש באלגוריתמי הצפנה חזקים, הימנעות מסיסמאות מקודדות (הארד קודד) ואימות נכון של זהות הנמען. (אליו את שולחת)
אני משאירה לך דוגמא להצעה השלישית שהעלתי, שימוש בספריית Crypto++
קוד שיוצר מפתח אקראי ואתחול וקטור (IV) לשימוש בהצפנת AES, קורא הודעת טקסט רגיל מהמשתמש, מצפין את ההודעה באמצעות מצב CBC של AES עם המפתח וה-IV שנוצר, ושולח את ההודעה המוצפנת דרך הרשת באמצעות חיבור שקע. מקווה שיעזור לך
<div style="direction: ltr;">#include <iostream></div><div style="direction: ltr;">#include <fstream></div><div style="direction: ltr;">#include <string></div><div style="direction: ltr;">#include <cryptopp/filters.h></div><div style="direction: ltr;">#include <cryptopp/hex.h></div><div style="direction: ltr;">#include <cryptopp/modes.h></div><div style="direction: ltr;">#include <cryptopp/osrng.h></div><div style="direction: ltr;">#include <cryptopp/secblock.h></div><div style="direction: ltr;">#include <cryptopp/socketft.h></div><div style="direction: ltr;">using namespace std;</div><div style="direction: ltr;">using namespace CryptoPP;</div><div style="direction: ltr;">int main()</div><div style="direction: ltr;">{</div><div style="direction: ltr;"> // Generate a random key and IV</div><div style="direction: ltr;"> AutoSeededRandomPool prng;</div><div style="direction: ltr;"> SecByteBlock key(AES::DEFAULT_KEYLENGTH), iv(AES::BLOCKSIZE);</div><div style="direction: ltr;"> prng.GenerateBlock(key, key.size());</div><div style="direction: ltr;"> prng.GenerateBlock(iv, iv.size());</div><div style="direction: ltr;"> // Read the plaintext message to be sent</div><div style="direction: ltr;"> string plaintext;</div><div style="direction: ltr;"> cout << "Enter the message to be sent: ";</div><div style="direction: ltr;"> getline(cin, plaintext);</div><div style="direction: ltr;"> // Encrypt the plaintext using AES-256</div><div style="direction: ltr;"> string ciphertext;</div><div style="direction: ltr;"> try</div><div style="direction: ltr;"> {</div><div style="direction: ltr;"> CBC_Mode<AES>::Encryption encryption(key, key.size(), iv);</div><div style="direction: ltr;"> StringSource(plaintext, true, new StreamTransformationFilter(encryption, new StringSink(ciphertext)));</div><div style="direction: ltr;"> }</div><div style="direction: ltr;"> catch (const CryptoPP::Exception& e)</div><div style="direction: ltr;"> {</div><div style="direction: ltr;"> cerr << e.what() << endl;</div><div style="direction: ltr;"> return 1;</div><div style="direction: ltr;"> }</div><div style="direction: ltr;"> // Send the encrypted message over the network to the recipient</div><div style="direction: ltr;"> try</div><div style="direction: ltr;"> {</div><div style="direction: ltr;"> SocketAddress sa("localhost", 8888);</div><div style="direction: ltr;"> Socket socket(sa.GetFamily(), SOCK_STREAM);</div><div style="direction: ltr;"> socket.Connect(sa);</div><div style="direction: ltr;"> socket.Send(ciphertext.data(), ciphertext.size());</div><div style="direction: ltr;"> }</div><div style="direction: ltr;"> catch (const SocketException& e)</div><div style="direction: ltr;"> {</div><div style="direction: ltr;"> cerr << e.what() << endl;</div><div style="direction: ltr;"> return 1;</div><div style="direction: ltr;"> }</div><div style="direction: ltr;"> cout << "Message sent successfully" << endl;</div><div style="direction: ltr;"> return 0;</div><div style="direction: ltr;">}
</div>