Очень простая форма шифрования файлов? - PullRequest
4 голосов
/ 14 декабря 2011

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

Ответы [ 7 ]

7 голосов
/ 14 декабря 2011

Самая простая практическая форма - шифр XOR . В основном вы генерируете ключ шифрования / дешифрования случайных чисел любой длины. Чтобы зашифровать или расшифровать ваши данные, XOR данные с ключом.

Это не очень безопасно; в основном он используется только для легкой запутывания.

#include <vector>

typedef unsigned __int8 BYTE;

std::vector<BYTE> xor_encryptdecrypt(const std::vector<BYTE>& encryptionKey, const std::vector<BYTE>& input)
{
    std::vector<BYTE> ret;
    ret.reserve(input.size());

    std::vector<BYTE>::const_iterator keyIterator = encryptionKey.begin();

    for(std::vector<BYTE>::const_iterator inputIterator = input.begin(); inputIterator != input.end(); ++ inputIterator)
    {
        ret.push_back(*inputIterator ^ *keyIterator);

        // advance the key iterator, wrapping to begin.
        if(++ keyIterator == encryptionKey.end())
            keyIterator = encryptionKey.begin();
    }
    return ret;
}


int main()
{
    // variable-length key of randomness, used for both encryption and decryption.
    std::vector<BYTE> key;
    key.push_back(0x55);
    key.push_back(0xae);
    key.push_back(0x8c);
    key.push_back(0x14);

    std::vector<BYTE> input;
    input.push_back(0x00);
    input.push_back(0x01);
    input.push_back(0x02);
    input.push_back(0x03);
    input.push_back(0x04);
    input.push_back(0x05);

    // encrypt
    std::vector<BYTE> encrypted = xor_encryptdecrypt(key, input);

    // decrypt
    std::vector<BYTE> decrypted = xor_encryptdecrypt(key, encrypted);

    return 0;
}
2 голосов
/ 14 декабря 2011

Самый простой способ - просто вызвать srand с постоянным значением, затем либо xor rand() с каждым символом. Лучше было бы использовать некоторый доступный случайный объект, который позволит избежать изменения глобального состояние rand(). Расшифровка - точно такой же алгоритм; шифрование дважды приводит к исходной строке. Важно всегда запускать генератор случайных чисел с одинаковым значением и выполнять одну и ту же последовательность обращений к нему.

2 голосов
/ 14 декабря 2011

Base64 . Несмотря на то, что более подходящим является просто установка разрешений на доступ к общедоступным и доступным для записи root.

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

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

0 голосов
/ 14 декабря 2011

Сжатие файла и переименование расширения очень эффективно для того, чтобы не пускать нетехнических пользователей к файлам. Если ОС не знает , что это zip-файл, он должен быть относительно безопасным от случайного двоичного поиска. Это дает дополнительное преимущество: вам не нужны никакие специальные инструменты для удаленной работы с ними.

Это явно не доказательство, но возврат инвестиций чертовски хорош.

0 голосов
/ 14 декабря 2011

использовать шифр Цезаря: http://en.wikipedia.org/wiki/Caesar_cipher

0 голосов
/ 14 декабря 2011

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

Возможно, подходит кодировка base64:

Ссылка на Википедию Base64

Счастливого кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...