سورس الگوریتم رمزنگاری RSA به زبان C++
در این بخش سورس الگوریتم رمزنگاری RSA به زبان C++ را برای شما آماده کرده ایم که در محیط نرم افزار Code::Blocks و زبان برنامه نویسی سی پلاس پلاس نوشته شده است. در ادامه می توانید توضیحات، تصاویر و همچنین فیلمی از نحوه اجرا شدن پروژه را مشاهده کنید.
توضیحات پروژه
RSA (Rivest–Shamir–Adleman) یکی از اولین سیستم های رمزنگاری بر اساس کلید عمومی است که به طور گسترده به منظور انتقال ایمن داده ها مورد استفاده قرار می گیرد. در چنین سیستم هایی از کلید عمومی برای رمزگذاری و از کلید خصوصی که با کلید عمومی تفاوت دارد، برای رمزگشایی استفاده می شود.
در این پروژه بعد از اجرا شدن برنامه، از کاربر مقادیر p و q به همراه یک متن ساده گرفته می شود. سپس برنامه کلید عمومی و خصوصی را تولید کرده و متن وارد شده را به استفاده از کلید عمومی رمزنگاری کرده و بایت های آن را نمایش میدهد و بعد از آن هم بایت های رمزگذاری شده رو با استفاده از کلید خصوصی رمزگشایی کرده و بایت های آن را نمایش می دهد. اگر به تصویری که از پروژه قرار داده شده است توجه کنید، متوجه می شوید که بایت های متن ساده دقیقا با بایت های رمزگشایی شده یکسان است.
شما با مشاهده سورس کد این پروژه می توانید با روش رمزگذاری و رمزگشایی داده ها آشنا شده و در برنامه های خود از آن استفاده کنید. البته برای برنامه های واقعی و بزرگ بهتر است از روش هایی که توسط برنامه نویسان دیگر تست شده و امنیت لازم را دارد استفاده شود و نباید از الگوریتم یا روشی که خودتان درست می کنید استفاده کنید، چون ممکن است باگ داشته باشد.
قسمت های از سورس کد
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #include <iostream> #include <ctime> #include <cstdlib> #include <cstring> using namespace std; #define LIMIT 10000 int log_power(int n, int p, int mod) { int result = 1; for (; p; p >>= 1) { if (p & 1) result = (1LL * result * n) % mod; n = (1LL * n * n) % mod; } return result; } int gcd(int a, int b) { while (b) { int r = a % b; a = b; b = r; } return a; } int main() { int p; int q; string plain_text; int plain_text_length; int* plain_text_bytes; int* encrypted_text_bytes; int* decrypted_text_bytes; cout << "Enter p: "; cin >> p; cout << "Enter q: "; cin >> q; cout << "Enter plain text to encrypt: "; cin.ignore(); getline(cin, plain_text); plain_text_length = plain_text.size(); plain_text_bytes = get_bytes(plain_text.c_str()); encrypted_text_bytes = new int[plain_text_length]; decrypted_text_bytes = new int[plain_text_length]; srand(time(NULL)); Keys keys = generate_keys(p, q); cout << endl << endl; cout << "Public key: " << keys.public_key.first << " " << keys.public_key.second << endl; cout << "Private key: " << keys.private_key.first << " " << keys.private_key.second << endl; cout << endl << endl; cout << "Plain text: " << plain_text << endl; cout << "Plain text bytes: " << endl; print_bytes(plain_text_bytes, plain_text_length); for (int i = 0; i < plain_text_length; i++) { char current_char = plain_text[i]; PublicKey key = keys.public_key; encrypted_text_bytes[i] = encrypt(key, current_char); } cout << endl << endl; cout << "Encrypted text bytes: " << endl; print_bytes(encrypted_text_bytes, plain_text_length); for (int i = 0; i < plain_text_length; i++) { int current_byte = encrypted_text_bytes[i]; PrivateKey key = keys.private_key; decrypted_text_bytes[i] = decrypt(key, current_byte); } cout << endl << endl; cout << "Decrypted text bytes: " << endl; print_bytes(decrypted_text_bytes, plain_text_length); delete[] plain_text_bytes; delete[] encrypted_text_bytes; delete[] decrypted_text_bytes; system("pause>nul"); return 0; } |
هیچ نظری ثبت نشده است