这种加密算法的名称是什么?

时间:2018-02-14 20:03:13

标签: c++ encryption cryptography xor

我发现加密算法在下面的“the_cipher_decipher_func”中实现:

#include <string>
#include <iostream>
#include <algorithm>

std::string cipher_decipher(const std::string& src, char mask, const char incr, const char mod)
{
    const auto the_cipher_decipher_func = [&](const char c)
    {
        mask = (mask + incr) % mod;
        return static_cast<char>(c ^ mask);
    };

    auto tgt = std::string{};
    std::transform(src.cbegin(), src.cend(), std::back_inserter(tgt), the_cipher_decipher_func);
    return tgt;
}

int main(int argc, char* argv[])
{
    if (argc < 2)
        return 1;

    auto source = std::string{argv[1]};

    const char incr = 12;   // arbitrary
    const char mod = 50;    // arbitrary
    const char initial_mask = mod / incr;   // arbitrary, but lower than "mod".

    auto mask_cipher = initial_mask;
    auto ciphered = cipher_decipher(source, mask_cipher, incr, mod);

    auto mask_decipher = initial_mask;
    auto deciphered = cipher_decipher(ciphered, mask_decipher, incr, mod);

    std::cout
        << "source: " << source << std::endl
        << "ciphered: " << ciphered << std::endl
        << "deciphered: " << deciphered << std::endl
        ;
    return 0;
}

它似乎是XOR和增量键的混合。但是,是否有人可以确定此加密算法的确切来源?

1 个答案:

答案 0 :(得分:4)

密码本身(通过XOR将密钥流与纯文本相结合)称为Vernam Cipher(以其发明者Gilbert Vernam命名)。

我不知道这种创建密钥流的特定方法的名称,尽管它所属的组有许多众所周知的名称,例如&#34; bad&#34;,&# 34;糟糕的&#34;,&#34;破碎&#34;。

这个例子看起来特别成问题。如果(例如)modincr都是素数,那么在重复之前,您至少会增加密钥流中的字符数。原样,它会在很短的时间后重复(这会让攻击者使用较少的密文找到密钥流)。