Android — алгоритм шифрования от C ++ до C #

У моей компании есть сервер, работающий на C ++. Я делаю мобильное приложение, используя Xamarin (C #).
Сервер имеет простую криптографию для сокетной связи, и сообщения отправляются в виде строк.

Это алгоритм C ++ (QT):

    void Cripto::criptog(QString key, unsigned char *text) {
int i = 0, y = 0, o = 0;
int blockSize = 3;
int len = strlen((char*)text);

for(i = 0, y = 0; i < len;) {
for(o = 0; o <= blockSize; o++) {
if(i >= len) break;
if(text[i] != 0) {
if(y >= key.length()) y = 0;
text[i] = text[i] ^ key.at(y).toAscii();
}
i++;
}
y++;
if(y >= key.length()) {
y = 0;
}
}
}

И это мой «перевод»:

public static string cripto(byte[] mtext) {
int i = 0, y = 0, o = 0;
int blockSize = 3;
int len = mtext.Length;
byte[] text = mtext;
string mkey = "!%&@!*$";
byte[] key = Encoding.ASCII.GetBytes(mkey);for(i = 0, y = 0; i < len;) {
for(o = 0; o <= blockSize; o++) {
if(i >= len) {
break;
}
if(text[i] != 0) {
if(y >= key.Length) {
y = 0;
}
text[i] = (byte)((text[i]) ^ (key[y]));
}
i++;
}
y++;
if(y >= key.Length) {
y = 0;
}
}
return(Encoding.ASCII.GetString(text));
}

Когда я получаю что-то от сервера, я могу понять только части сообщения, например, что кодировка неправильная или что-то в этом роде.
Вот пример «грязного» ответа:

10;50;230.1_2.1X6.1?7;5>30;0013?PASPE OFCRA"HA +  NA LELTOR?

Эта последняя часть («PASPE OFCRA« HA + NA LELTOR ») является« читабельной », так как протокол написан на португальском языке. Правильно было бы:« PASSE O CRACHA NA LEITORA »… Я думаю …

Что-то не так с моим кодом C #?

C ++ использует беззнаковый символ. Поискав некоторое время, я обнаружил, что C # -эквивалент этого — просто байт. Я прав?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …