Простое шифрование и дешифрование текстового документа - PullRequest
1 голос
/ 21 декабря 2011

Я создаю приложение, которое пишет небольшой текстовый файл, содержащий 3 строки, а затем загружает их обратно в приложение в виджете списка.

Это все работает нормально, но теперь я хочу сделать так, чтобы текстовый файл не был в виде простого текста. Мне не нужен какой-либо сложный шифр или что-либо, для чего нужен ключ для шифрования и дешифрования. Я просто хочу иметь возможность зашифровать его при сохранении (сохраняет документ, который не представлен в виде простого текста) и расшифровать его, прежде чем он загрузит его обратно в потерянный виджет.

Ниже приведен мой код для записи и чтения из текстового файла. Я просто хотел бы переделать это, чтобы это не простой текст, и мне все равно, что это небезопасно, просто не простой текст

QFile m_file("mytext.txt");
m_file.open(QFile::WriteOnly | QFile::Append);
QTextStream m_stream(&m_file);
m_stream << ui->txt_1->text() + "    " + ui->txt_2->text() + "    " + ui->txt_3->text()                         <<;
m_file.close(); 




QFile n_file("mytext.txt");
n_file.open(QFile::ReadOnly);
QTextStream n_stream(&n_file);
int i=0;
while (!n_stream.atEnd())
{
    ui->listWidget->addItem(n_stream.readLine());
    i++;
}

Ответы [ 3 ]

1 голос
/ 21 декабря 2011

Может быть?

void cyptStr(char *str){
    if(!str){
        return;
    }
    char *end = str + (strlen(str) - 1);
    for(;str < end;str++){
        if (*str != ' ')
            *str ^= 1;
    }
}
void ucyptStr(char *str){
    if(!str){
        return;
    }
    char *end = str + (strlen(str) - 1);
    for(;str < end;str++){
        if (*str != ' ')
            *str ^= 1;
    }
}
1 голос
/ 22 июля 2014

Полагаю, из вашего вопроса и комментариев вы не хотите, чтобы какая-либо внешняя библиотека выполняла эту простую задачу. Вот альтернативы:

1 - использовать собственную функцию шифрования / дешифрования . Затем просто вызовите функцию шифрования при записи, вызовите функцию дешифрования при чтении. Вот полезный код для этой цели. (Та же функция, что и для enc / dec, немного хакерская)

string encryptDecrypt(string toEncrypt) {
    char key[3] = {'K', 'C', 'Q'}; //Any chars will work, in an array of any size
    string output = toEncrypt;

    for (int i = 0; i < toEncrypt.size(); i++)
        output[i] = toEncrypt[i] ^ key[i % (sizeof(key) / sizeof(char))];

    return output;
}

int main(int argc, const char * argv[])
{
    string encrypted = encryptDecrypt("kylewbanks.com");
    cout << "Encrypted:" << encrypted << "\n";

    string decrypted = encryptDecrypt(encrypted);
    cout << "Decrypted:" << decrypted << "\n";

    return 0;
}

2 - Для абсолютной безопасности и более стандартного кода используйте алгоритм шифрования. Лучший способ использования алгоритма шифрования - выбрать современную криптографическую библиотеку, такую ​​как Crypto ++ или Qt Cryptographic Architecture (QCA) .

Выбор за вами.

1 голос
/ 21 декабря 2011

Я знаю, что вы не хотите это слышать, но шифрование - это то, что вы не хотите делать сами.На самом деле проще всего использовать для этого хорошую библиотеку, такую ​​как Crypto ++ .

Если вы действительно чувствуете необходимость что-то сделать самостоятельно, Vignère cipher - этоочень простой алгоритм для кодирования, но также очень простой для взлома.

...