我一直致力于将 C++ 加密方法转换为 C#。问题是,我无法让它按照我想要的方式加密/解密。
这个想法很简单,我捕获一个数据包,然后解密它。输出将是:数据包大小 - 命令/操作 - 空(结束)
(解密器将前两个字节截掉)
C++ 代码是这样的:
// Crypt the packet with Xor operator
void cryptPacket(char *packet)
{
unsigned short paksize=(*((unsigned short*)&packet[0])) - 2;
for(int i=2; i<paksize; i++)
{
packet[i] = 0x61 ^ packet[i];
}
}
所以我认为如果我不想使用指针,这将在 C# 中工作:
public static char[] CryptPacket(char[] packet)
{
ushort paksize = (ushort) (packet.Length - 2);
for(int i=2; i<paksize; i++)
{
packet[i] = (char) (0x61 ^ packet[i]);
}
return packet;
}
- 但事实并非如此,返回的值只是另一行 rubish 而不是解密的值。给出的输出是:..O♦&/OOOe。
好吧..至少'/'出于某种原因在正确的位置。
更多信息:
- 我正在使用的测试包是这样的:
十六进制值:0C 00 E2 66 65 47 4E 09 04 13 65 00
纯文本:...feGN...e。
解密:XX/这里XX
X = 未知值,我真的不记得了,但没关系。
- 使用 Hex Workshop,您可以通过以下方式解密数据包:
- Special 将十六进制值粘贴为 CF_TEXT,确保选中“视为十六进制值”框。
- 然后,从您刚刚粘贴的十六进制值中选择所有内容,除了第一个和最后 2 个字节。
- 转到工具>操作>异或。
- 选择“将数据视为 8 位数据”并将值设置为“61”。
- 按“确定”,您就完成了。
这就是我目前所能提供的所有信息,因为我正在脑海中写下这个。
感谢您的时间。
如果您在此没有看到问题:
如果有人可以查看代码以了解它有什么问题,或者是否有其他方法可以做到这一点,那就太好了。我正在转换这段代码,因为我对 C++ 很糟糕,并且想用该代码创建一个 C# 应用程序。
Ps:代码标签等很痛苦,所以如果间距等有点混乱,我很抱歉。