C#:加密一个字符串,一次2位

时间:2009-10-27 15:00:59

标签: c# encryption

我被要求转换一些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 个答案:

答案 0 :(得分:2)

它实际上是一次将字符串编码为两个字节(WORD大小)。另一种写作方式是:

int j=0;
for(i=0; i<SizeInput/2; ++i) {
  randomic *= COMUL;
  StrOut[j] += randomic;
  j += 2;
}

答案 1 :(得分:1)

如下:

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;
}

答案 2 :(得分:0)

我不知道你认为它一次只能是两个“位”。它似乎与整个字节一起工作。你需要开始的只有:

byte[] bytes = ASCII.GetBytes(inputString);