gpt4 book ai didi

c# - 我如何将此加密从 C# 转换为 C

转载 作者:太空宇宙 更新时间:2023-11-04 05:21:35 25 4
gpt4 key购买 nike

这是我使用的 C# 代码:

public void Decrypt(byte[] @in, byte[] @out, int size)
{
lock (this)
{
for (ushort i = 0; i < size; i++)
{
if (_server)
{
@out[i] = (byte)(@in[i] ^ 0xAB);
@out[i] = (byte)((@out[i] << 4) | (@out[i] >> 4));
@out[i] = (byte)(ConquerKeys.Key2[_inCounter >> 8] ^ @out[i]);
@out[i] = (byte)(ConquerKeys.Key1[_inCounter & 0xFF] ^ @out[i]);
}
else
{
@out[i] = (byte)(ConquerKeys.Key1[_inCounter & 0xFF] ^ @in[i]);
@out[i] = (byte)(ConquerKeys.Key2[_inCounter >> 8] ^ @out[i]);
@out[i] = (byte)((@out[i] << 4) | (@out[i] >> 4));
@out[i] = (byte)(@out[i] ^ 0xAB);
}
_inCounter = (ushort)(_inCounter + 1);
}
}
}

这就是我将它转换为在 C 中工作的方式。

char* decrypt(char* in, int size, int server)
{
char out[size];
memset(out, 0, size);
for (int i = 0; i < size; i++)
{
if (server == 1)
{
out[i] = in[i] ^ 0xAB;
out[i] = out[i] << 4 | out[i] >> 4;
out[i] = Key2[incounter >> 8] ^ out[i];
out[i] = Key1[incounter & 0xFF] ^ in[i];
}
else if (server == 0)
{
out[i] = Key1[incounter & 0xFF] ^ in[i];
out[i] = Key2[incounter >> 8] ^ out[i];
out[i] = out[i] << 4 | out[i] >> 4;
out[i] = out[i] ^ 0xAB;
}
incounter++;
}
return out;
}

但是由于某些原因,C 无法工作。

Link for the full C# file

Link for the full C file

Link for the C implementation

最佳答案

有一个翻译错误。

C# 行:

@out[i] = (byte)(ConquerKeys.Key1[_inCounter & 0xFF] ^ @out[i]);

成为:

out[i] = Key1[incounter & 0xFF] ^ in[i];

xor (^) 右边的值来自错误的数组。

此外,您将返回一个堆栈分配的变量,这将导致各种问题。

改变:

char out[size];
memset(out, 0, size);

到:

char *out = (char*)calloc(size, sizeof(char));

关于c# - 我如何将此加密从 C# 转换为 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4390624/

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