Загрузка...

Оцените софт

Тема в разделе C/C++ создана пользователем Whales_Nik 20 июн 2022. 553 просмотра

  1. Whales_Nik
    Whales_Nik Автор темы 20 июн 2022 50 27 мар 2022
    В общем, написал относительно простую программу, которая шифрует текстовые ********* и сохраняет их в другой файл, зашифрованные с расширением .lolz, просьба оценить. Ну или если есть какие-то предложения, предлагайте =)
    Dropmefiles
    VT (VT почему-то 3 детектят, но я сам писал хз, может, из-за маленького размера)
    В любом случае, для тех кто не хотят скачивать есть исходный код:
    C
    #include <windows.h>
    #include <string>
    #include <iostream>
    #include <fstream>
    #include <conio.h>
    #include <ctime>

    using namespace std;

    string fastGetD() {
    DWORD nBuffer = MAX_PATH;
    char buffer[MAX_PATH] = {};
    GetCurrentDirectoryA(nBuffer, buffer);
    return buffer;
    }
    string encrypt(string, int);
    string decrypt(string, int);
    string toFileName();
    string getFunc();
    int getKey(string);

    int main() {
    SetConsoleTitle(L"CRYPT 1.0 by @WhalesNik");
    setlocale(LC_ALL, "Russian");
    string argv = "";
    char ch = '\n';
    while (ch != 'X' && ch != 'x') {
    argv = getFunc();
    srand(time(0));
    ifstream in; ofstream out;
    if (argv == "-d" || argv == "-e") {
    int key;
    if (argv == "-e") {
    key = rand() % 10 + 1;
    string userFile = "";
    cout << "\tВВЕДИТЕ ПОЛНЫЙ ПУТЬ К ФАЙЛУ ИЛИ ПЕРЕТАЩИТЕ ЕГО В ОКНО ПРОГРАММЫ: ";
    cin >> userFile;
    if (userFile[0] == '\"') { userFile.erase(userFile.begin()); userFile.erase(userFile.end()); }
    string filename = "userInputFile" + toFileName() + ".lolz";
    out.open(filename.c_str());
    out.close();
    in.open(filename.c_str());
    if (in.is_open())
    cout << "\t\tСОЗДАН ЗАШИФРОВАННЫЙ ФАЙЛ: " << filename << endl;
    else {
    cout << "\t\tОШИБКА СОЗДАНИЯ ФАЙЛА" << endl;
    in.close();
    return 0;
    }
    in.close();
    out.open(filename.c_str());
    in.open(userFile.c_str());
    out << key << endl;
    string str = "";
    bool first = 1;
    while (getline(in, str)) {
    cout << "READING: " << str << endl;
    out << (first ? "" : "\n") << encrypt(str, key);
    first = 0;
    }
    in.close();
    out.close();
    cout << "\n\tCOMPLETE!\n";
    }
    else if (argv == "-d") {
    string userFile = "";
    cout << "\tВВЕДИТЕ ПОЛНЫЙ ПУТЬ К ФАЙЛУ ИЛИ ПЕРЕТАЩИТЕ ЕГО В ОКНО ПРОГРАММЫ: ";
    cin >> userFile;
    if (userFile[0] == '\"') { userFile.erase(userFile.begin()); userFile.erase(userFile.end()); }
    string filename = "userInputFile" + toFileName() + ".txt";
    out.open(filename.c_str());
    out.close();
    in.open(filename.c_str());
    if (in.is_open())
    cout << "\t\tСОЗДАН РАСШИФРОВАННЫЙ ФАЙЛ: " << filename << endl;
    else {
    cout << "\t\tОШИБКА СОЗДАНИЯ ФАЙЛА" << endl;
    in.close();
    return 0;
    }
    in.close();
    key = getKey(userFile);
    out.open(filename.c_str());
    in.open(userFile.c_str());
    string str = "";
    bool first = 1;
    getline(in, str);
    while (getline(in, str)) {
    out << (first ? "" : "\n") << decrypt(str, key);
    first = 0;
    }
    in.close();
    out.close();
    cout << "\n\tCOMPLETE!\n";
    }
    }
    else {
    cout << "\t\tНЕИЗВЕСТНОЕ ЗНАЧЕНИЕ!\nПЕРЕЗАПУСТИТЕ ПРОГРАММУ!\n";
    }
    ch = _getch();
    system("cls");
    }
    return 0;
    }


    string encrypt(string str, int key) {
    for (int i = 0; i < (int)str.size(); i++) {
    if (str[i] >= 'a' && str[i] <= 'z') {
    str[i] = str[i] + key;
    if (str[i] > 'z') {
    str[i] = str[i] - 'z' + 'a' - 1;
    }
    }
    else if (str[i] >= 'A' && str[i] <= 'Z') {
    str[i] = str[i] + key;
    if (str[i] > 'Z') {
    str[i] = str[i] - 'Z' + 'A' - 1;
    }
    }
    }
    return str;
    }

    string decrypt(string str, int key) {
    for (int i = 0; i < (int)str.size(); i++) {
    if (str[i] >= 'a' && str[i] <= 'z') {
    str[i] = str[i] - key;
    if (str[i] < 'a') {
    str[i] = str[i] + 'z' - 'a' + 1;
    }
    }
    else if (str[i] >= 'A' && str[i] <= 'Z') {
    str[i] = str[i] - key;
    if (str[i] < 'A') {
    str[i] = str[i] + 'Z' - 'A' + 1;
    }
    }
    }
    return str;
    }

    string toFileName() {
    char buffer[80];
    time_t seconds = time(NULL);
    tm* timeinfo = localtime(&seconds);
    const char* format = "%d_%m_%Y_%H_%M_%S";
    strftime(buffer, 80, format, timeinfo);
    return buffer;
    }

    int getKey(string filename) {
    ifstream in;
    in.open(filename.c_str());
    int key;
    in >> key;
    in.close();
    return key;
    }

    string getFunc() {
    int ch = 0;
    bool choose = 0;
    while (ch != 13) {
    cout << "\t@Whales_Nik\n";
    cout << "\n\n\tЗАШИФРОВАТЬ ФАЙЛ" << (choose ? "\n" : "\t<-\n");
    cout << "\tРАСШИФРОВАТЬ ФАЙЛ" << (choose ? "\t<-\n" : "\n");
    ch = _getch();
    if (ch == 72 || ch == 80) choose = !choose;
    system("cls");
    }
    return (choose ? "-d" : "-e");
    }
     
  2. savageplugg
    savageplugg 20 июн 2022 Заблокирован(а) 42 10 июн 2022
    сделай отправку в телеграм
     
    1. Посмотреть предыдущие комментарии (2)
    2. Whales_Nik Автор темы
      savageplugg, попробую, спасибо за идею
    3. BaDRabbiT404
      savageplugg, больше походит на своеподобный шифровальщик, чем *******)
    4. KL9CKER
      savageplugg, вот так делают отправку в телеграм прямиком из файла, а потом удивляются "А почему мне засрали весь канал/чат"
  3. xeasyz
    xeasyz 20 июн 2022 3 1 май 2021
    1. Whales_Nik Автор темы
      xeasyz, интересно же самому писать, а не всегда использовать все готовое
  4. vtlstolyarov
    vtlstolyarov 5 июл 2022 468 8 янв 2022
    шифрование - говно потому что не напрягаясь вскрывается частотным анализом, сам код тоже так себе - много повторений, разбивка на отдельные функции недостаточная
     
    5 июл 2022 Изменено
    1. Посмотреть предыдущие комментарии (3)
    2. vtlstolyarov
      Whales_Nik, кстати, можешь на этом примере потренироваться использовать паттерн "стратегия", где стратегией будет метод шифрования и стратегия будет передаваться методу шифровния (в данном случае что-то типа
      CaesarСipherEncryption
      ) - при такой архитектуре переделать решение под другое шифрование будет очень легко
    3. 4RCH4N63L
      vtlstolyarov, Собственно а зачем заморачиваться с частотным анализом, если ****форсом ты получишь точный результат быстрее.
    4. vtlstolyarov
      4RCH4N63L, это если ты знаешь что сообщение зашифровано шифром Цезаря, а если ты этого не знаешь и у тебя есть просто "зашифрованный" текст, то частотный анализ - это первое что приходит в голову.
  5. unnamed001
    unnamed001 5 июл 2022 5996 2 сен 2020
    Просто ставишь брейкпоинт на вызов decrypt и видишь строку))))
     
  6. 4RCH4N63L
    4RCH4N63L 6 июл 2022 1 6 июл 2022
    :cat_really:Серьезно... шифр цезаря... такое взломать пару сек. Мой совет, если реально хочешь написать +- адекватный шифровальщик документов изучи как работает DES и напиши его, для начала можно даже упрощённую версию, ее написать проще... а это в наше время даже шифром не назовешь.
     
    1. Whales_Nik Автор темы
      4RCH4N63L, я щас новую прогу делаю, там шифр цезаря, вернама и RSA
    2. 4RCH4N63L
      Whales_Nik, :roflanFacepalm:ты должен понимать что шифруя текст или документ кучей шифров не обезопасить его, более того сделает не практичным в использовании. К примеру в шифре Вермана нужен ключ длиной как документ который шифруешь. И даже при высокой криптографической стойкости это не практично, ведь если файл будет 100МБ тебе понадобится ещё и ключ 100МБ. А RSA для новичка не подходит, сначала выучи как работает DES и AES, а потом берись за что-то более сложное.
    3. Whales_Nik Автор темы
Top
Загрузка...