我被要求转换一些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#在字符串上执行这些操作的方法吗?
答案 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);