编译时字符串异或的问题

时间:2018-06-12 14:27:06

标签: c++ string xor

我基本上试图创建一个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   地址。

我看到一些代码在网上这样做但是它们太复杂了,我甚至无法真正理解发生了什么,我想自己制作。我很感激任何帮助,谢谢!

0 个答案:

没有答案