非常基本的文件加密形式?

时间:2011-12-14 16:16:25

标签: c++ algorithm encryption

加密纯文本文件的简单有效方法是什么?我不是在寻求安全,我只是希望普通用户不能篡改它。假设我有一个带有换行符分隔的电子邮件地址的文件。我希望它在打开时看起来像乱码,但很容易解密。

7 个答案:

答案 0 :(得分:7)

最简单的实用形式是XOR cipher。基本上,您生成任意长度的随机数的加密/解密密钥。要加密或解密数据,请使用密钥对数据进行异或。

它不是很安全;它主要用于进行轻度混淆。

#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;
}

答案 1 :(得分:2)

Base64。即使只是将访问权限设置为世界可读和根写可能更合适。

答案 2 :(得分:2)

最简单的方法可能只是使用常量值调用srand, 然后与每个角色xor rand()。更好的是使用 一些可用的随机对象,这将避免改变全局 状态为rand()。解密是完全相同的算法;加密 两次导致初始字符串。重要的是始终为具有相同值的随机生成器播种,并对其进行相同的调用序列。

答案 3 :(得分:1)

TEA是一个非常好的小加密算法,可以满足基本需求,并且非常简单,可以实现自己的版本,并且有许多常用语言版本。

答案 4 :(得分:0)

我认为你所寻找的是'无密码'加扰,其约束条件是它应该导致ASCII文本并且不会引入换行符。

也许base64编码是合适的:

Wikipedia Base64 link

快乐的编码!

答案 5 :(得分:0)

答案 6 :(得分:0)

压缩文件并重命名扩展名对于保护非技术用户不受文件影响非常有效。除非操作系统知道它是一个zip文件,否则对于偶然的二进制搜索应该是相对安全的。这样做的另一个好处是,您不需要任何特殊工具来远程使用它们。

显然,这不是傻瓜证明,但投资回报非常好。