获取字符串的C++定义

获取字符串的C++定义,c++,obfuscation,xor,pre-compilation,C++,Obfuscation,Xor,Pre Compilation,我想创建一个非常基本的模糊处理方法,基本上我只想对调用的每个字符串进行异或 printf("%s\n", OBF("Test")); 会产生类似于 printf("%s\n", unxor("\x65\x54\x42\x45")); 我用这个方法来对字符串进行了1的修改,使用现代C++,你可以在没有任何宏的情况下编写它: #include <iostream> #include <array> #include <utility> #include <

我想创建一个非常基本的模糊处理方法,基本上我只想对调用的每个字符串进行异或

printf("%s\n", OBF("Test"));
会产生类似于

printf("%s\n", unxor("\x65\x54\x42\x45"));

我用这个方法来对字符串进行了1的修改,

使用现代C++,你可以在没有任何宏的情况下编写它:

#include <iostream>
#include <array>
#include <utility>
#include <cstddef>

constexpr const char key_byte{'1'};

template<::std::size_t VArrayItemsCount, ::std::size_t... Is> constexpr auto
obf_impl
(
    ::std::index_sequence<Is...>
,   char const ( & sz_text )[VArrayItemsCount]
)
-> ::std::array<char, VArrayItemsCount>
{
    return(::std::array<char, VArrayItemsCount>{static_cast<char>(sz_text[Is] ^ key_byte)..., '\0'});
}

template<::std::size_t VArrayItemsCount> constexpr auto
obf
(
    char const ( & sz_text )[VArrayItemsCount]
)
-> ::std::array<char, VArrayItemsCount>
{
    return
    (
        obf_impl<VArrayItemsCount>
        (
            ::std::make_index_sequence<VArrayItemsCount - ::std::size_t{1}>()
        ,   sz_text
        )
    );
}

int main()
{
    constexpr const auto hello{obf("hello")};
    ::std::cout << hello.data() << ::std::endl;
    return 0;
}

我不认为有任何方法可以在预处理器中循环一个字符串。编写一个函数。可能可以完成一些操作,但我不确定。不要在C++中使用printf,那么:可能是