小编Mah*_*oud的帖子

将包含C中的无符号字符指针的代码移植到C#

我在C中有这个代码,我需要移植到C#:

void CryptoBuffer(unsigned char *Buffer, unsigned short length)
{
    unsigned short i;
    for(i=0; i < length; i++)
    {
        *Buffer ^= 0xAA;
        *Buffer++ += 0xC9;
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过这个:

public void CryptoBuffer(byte[] buffer, int length)
{
    for(int i = 0; i < length; i++)
    {
        buffer[i] ^= 0xAA;
        buffer[i] += 0xC9;
    }
}
Run Code Online (Sandbox Code Playgroud)

但结果与预期不符.

根据这个例子,这个:

A5 03 18 01...
Run Code Online (Sandbox Code Playgroud)

应该成为这样的:

A5 6F 93 8B...
Run Code Online (Sandbox Code Playgroud)

它还说第一个字节没有加密,所以这就是A5保持不变的原因.

编辑澄清:规范只是说你应该跳过第一个字节,它没有详细说明,所以我猜你只是将序列从位置1传递到最后一个位置跳过第一个字节.

但是我对C#端口的结果是:

A5 72 7B 74...
Run Code Online (Sandbox Code Playgroud)

这个端口是正确的还是我错过了什么?

编辑2:为了进一步澄清,这是一个封闭的协议,所以我不能详细说明,这就是为什么我提供了足够的信息来帮助我移植代码,C代码是给我的那个,那就是规范说它会做什么.真正的问题是规范中的"0xAA"是错误的,这就是输出不是预期的原因.这里提供的C#代码和接受的答案毕竟是正确的.

c c# encryption

7
推荐指数
2
解决办法
2230
查看次数

标签 统计

c ×1

c# ×1

encryption ×1