0

recv 関数を迂回し、バッファを復号化しようとしましたが、関数の変更バッファ サイズを復号化し、decryotion が無効であると考えています。コード:

int WINAPI OwnRecv(SOCKET s, char FAR *buff, int len, int flags)
{
    if(s == GameClientSocket)
    {
        int received = pTrampolineRecv(s, buff, len, flags);

        if(received <= 0)
        {
            return received;
        }
            // now strlen(buff) is 2!!
        char * plaintext;
        plaintext = (char *)aes_decrypt(&Decrypt_Context, (unsigned char*)buff, &received);
        (char *) buff = plaintext; // now strlen(buff) is 5!!
        return received;
    }
    return pTrampolineRecv(s, buff, len, flags);
}

コードの何が問題になっていますか?

ありがとう!

4

1 に答える 1

0

プロトコルを実装するのを忘れました! データの暗号化と復号化に使用するプロトコルが何であれ、実際に実装する必要があります。ブロック サイズ、パディングなどを定義する必要があります。魔法だけではうまくいきません。(ストリーム暗号を使用すると、ブロック暗号を使用するよりもはるかに簡単になります。)

strlenまた、任意のバイナリ データを呼び出さないでください。このstrlen関数は、C スタイルの文字列専用です。

また、このコード行は、あなたが思っていることをしません:

    (char *) buff = plaintext; // now strlen(buff) is 5!!

バッファへのポインタを保持する変数の値を変更してbuffも、バッファの内容には影響しません。呼び出し元が気にするのはそれだけです。

于 2012-05-19T10:25:51.057 に答える