C #: шифрование строки, 2 бита за раз - PullRequest
1 голос
/ 27 октября 2009

Меня попросили преобразовать некоторый код C ++, чтобы мы могли использовать его в приложении C #. Этот фрагмент кода используется для расшифровки лицензионного ключа регистрации, который встроен и передан в конфигурационные файлы.

Для меня это похоже на шифрование строки 2 байта (исправление) за раз, и я не могу понять, как сделать что-то подобное в C #.

void APIENTRY EncryptRegBuffer(LPSTR StrInput,int SizeInput,LPSTR StrOut)
{
#define   SEMENTE 17
#define   COMUL   37
    WORD  randomic=SEMENTE;
    WORD *pw;
    int   i;

    memcpy(StrOut,StrInput,SizeInput);
    StrOut[SizeInput]=NULO;
    pw=(WORD *) StrOut;
    for(i=0; i < (SizeInput/2); ++i) {
        randomic*=COMUL;
        *pw+=randomic;
        ++pw;
    }
}

Может кто-нибудь посоветовать мне методы, используемые для выполнения такого рода операций над строкой с использованием C #?

Ответы [ 3 ]

2 голосов
/ 27 октября 2009

Это на самом деле кодирование строки по два байта (размер слова) за раз. Альтернативный способ написать это:

int j=0;
for(i=0; i<SizeInput/2; ++i) {
  randomic *= COMUL;
  StrOut[j] += randomic;
  j += 2;
}
1 голос
/ 27 октября 2009

Как насчет чего-то вроде:

public string EncryptRegBuffer(string input)
{
    const UInt16 SEMENTE = 17;
    const UInt16 COMUL = 37;

    int randomic = SEMENTE;
    string output = "";

    foreach (char c in input) {
        randomic *= COMUL;
        output += (char)(c + randomic);
    }
    return output;
}
0 голосов
/ 27 октября 2009

Я не понимаю, где вы думаете, что это два "бита" одновременно. Кажется, он работает с целыми байтами. Все, что вам нужно, чтобы начать это:

byte[] bytes = ASCII.GetBytes(inputString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...