Я хочу зашифровать/закодировать строку во время компиляции, чтобы исходная строка не отображалась в скомпилированном исполняемом файле.
Я видел несколько примеров, но они не могут принимать строковый литерал в качестве аргумента. См. Следующий пример:
template<char c> struct add_three {
enum { value = c+3 };
};
template <char... Chars> struct EncryptCharsA {
static const char value[sizeof...(Chars) + 1];
};
template<char... Chars>
char const EncryptCharsA<Chars...>::value[sizeof...(Chars) + 1] = {
add_three<Chars>::value...
};
int main() {
std::cout << EncryptCharsA<'A','B','C'>::value << std::endl;
// prints "DEF"
}
Я не хочу предоставлять каждый символ отдельно, как он. Моя цель - передать строковый литерал следующим образом:
EncryptString<"String to encrypt">::value
Также есть несколько примеров, таких как:
#define CRYPT8(str) { CRYPT8_(str "\0\0\0\0\0\0\0\0") }
#define CRYPT8_(str) (str)[0] + 1, (str)[1] + 2, (str)[2] + 3, (str)[3] + 4, (str)[4] + 5, (str)[5] + 6, (str)[6] + 7, (str)[7] + 8, '\0'
// calling it
const char str[] = CRYPT8("ntdll");
Но он ограничивает размер строки.
Есть ли способ достичь того, чего я хочу?