gpt4 book ai didi

C# 转换 XOR crypt 函数

转载 作者:行者123 更新时间:2023-11-30 02:10:14 24 4
gpt4 key购买 nike

我一直致力于将 C++ 加密方法转换为 C#。问题是,我无法让它按照我想要的方式加密/解密。

这个想法很简单,我捕获一个数据包,然后解密它。输出将是:数据包大小 - 命令/操作 - 空(结束)

(解密器截掉前2个字节和后2个字节)

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

- 但事实并非如此,返回的值只是另一行废话而不是解密后的值。给出的输出是:..O♦&/OOOe。

嗯.. 出于某种原因至少“/”在正确的位置。

更多信息:

  • 我使用的测试包是这样的:

十六进制值:0C 00 E2 66 65 47 4E 09 04 13 65 00

纯文本:...feGN...e.

解密:XX/此处XX

X = 未知值,我记不太清了,不过没关系。

  • 使用 Hex Workshop,您可以通过以下方式解密数据包:
    1. 特殊 将十六进制值粘贴为 CF_TEXT,确保选中“视为十六进制值”框。
    2. 然后,从您刚刚粘贴的十六进制值中选择除第一个和最后两个字节之外的所有内容。
    3. 转到工具>操作>Xor。
    4. 选择“将数据视为 8 位数据”并将值设置为“61”。
    5. 按“确定”,大功告成。

这就是我目前能提供的所有信息,因为我是凭空写下来的。

感谢您的宝贵时间。

如果您没有在其中看到问题:

如果有人可以查看代码以了解它有什么问题,或者是否有其他方法可以做到这一点,那就太好了。我正在转换此代码,因为我对 C++ 非常厌恶,并且想使用该代码创建一个 C# 应用程序。

Ps:代码标签等很麻烦,如果间距等有点乱,我很抱歉。

最佳答案

您的问题可能是因为 .NET 的字符是 unicode,一些字符将使用多个字节,而您的位掩码只有一个字节长。因此最高有效字节将保持不变。

关于C# 转换 XOR crypt 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4815959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com