我被要求转换一些C++代码,以便我们可以在C#应用程序中使用它。这段代码用于解密在配置文件中嵌入和传递的注册许可证密钥。
对我来说,它看起来就像是一次加密两个字节的字符串(更正),对于我来说,我无法在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#对字符串执行这些类型的操作的方法吗?
发布于 2009-10-27 23:10:00
它实际上是一次用两个字节(字长)对字符串进行编码。编写此代码的另一种方法是:
int j=0;
for(i=0; i<SizeInput/2; ++i) {
randomic *= COMUL;
StrOut[j] += randomic;
j += 2;
}发布于 2009-10-27 23:39:51
不如这样吧:
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;
}发布于 2009-10-27 23:10:18
我不明白你认为这是两个“比特”同时发生的地方。它似乎是使用整字节工作的。你需要做的就是:
byte[] bytes = ASCII.GetBytes(inputString);https://stackoverflow.com/questions/1631406
复制相似问题