我基本上试图创建一个C-String包装器,它在编译时对字符串进行异或(因此它们不会显示在文件的二进制文件中)并在运行时解密它以便正确使用。这是我的代码:
class XORString
{
public:
XORString( wchar_t* text )
{
this->m_Text = text;
this->encode( );
}
~XORString( void )
{
}
wchar_t* m_Text = { };
auto constexpr text( void ) -> wchar_t*
{
return this->decode( );
}
auto constexpr length( void ) -> int
{
int i = { };
while ( '\0' != this->m_Text [ i ] )
{
++i;
}
return i;
}
private:
auto constexpr copy( wchar_t** v1, wchar_t** v2 ) -> bool
{
int v1_len = { };
int v2_len = { };
while ( '\0' != v1 [ v1_len ] )
{
++v1_len;
}
while ( '\0' != v2 [ v2_len ] )
{
++v2_len;
}
for ( int i = { }; v2 [ i ] != '\0'; ++i )
{
v1 [ i ] = v2 [ i ];
}
return true;
}
public:
auto constexpr encode( void ) noexcept -> void
{
wchar_t* new_text = { };
this->copy( &new_text, &this->m_Text );
for ( int i = { }; i < this->length( ); ++i )
{
int r = random_int( ) % 100;
new_text [ i ] ^= static_cast<wchar_t>( r );
}
this->m_Text = new_text;
}
auto constexpr decode( void ) -> wchar_t*
{
wchar_t* new_text = { };
this->copy( &new_text, &this->m_Text );
for ( int i = { }; i < this->length( ); ++i )
{
int r = random_int( ) % 100;
new_text [ i ] ^= static_cast<wchar_t>( r );
}
return new_text;
}
};
它应该像这样使用:
XORString lpString = (wchar_t*)L"My string";
我正在使用wchar_t *而不是const wchar_t *,因为我不知道如果它是常量,我甚至会尝试在编码/解码中使用该字符串,但你也可以对此进行评论。
错误:
我在编码功能中遇到错误。它说
抛出异常:写入访问冲突。 new_text是0x Random 地址。
我看到一些代码在网上这样做但是它们太复杂了,我甚至无法真正理解发生了什么,我想自己制作。我很感激任何帮助,谢谢!