byte[] aArr = { 113, 76, 155, 186, 152, 127, 248, 183 };
byte[] bArr = new byte[8];byte[] key = { 0, 0, 0, 0, 0, 0, 0, 0 };
for (int i = 0; i < 8; i++)
{
    if (i > 0)
    {
        key[i % 8] = (byte)(key[i % 8] + aArr[i - 1] ^ (byte)i);
        bArr[i] = (byte)(aArr[i] - aArr[i - 1] ^ key[i % 8]);
    }
    else
    {
        bArr[i] = (byte)(aArr[i] ^ key[0]);
    }
}Log(aArr, " aArr ");
Log(bArr, " bArr ");key = new byte[8];for (int i = 0; i < 8; i++)
{
    if (i > 0)
    {
        key[i % 8] = (byte)((aArr[i] - bArr[i]) ^ aArr[i - 1]);
        key[i % 8] = (byte)(key[i % 8] - aArr[i - 1] ^ (byte)i);
    }
    else
    {
        key[0] = (byte)(aArr[i] ^ bArr[i]);
    }
}
Log(key, "CalcKey");输出结果:
[ aArr ] 71 4C 9B BA 98 7F F8 B7 
[ bArr ] 71 AB 01 87 60 7A 00 40 
[CalcKey] 00 5E 88 0E CC 00 0E 90 
为什么逆推出来的Key不是8个0呢~~  100分求教

解决方案 »

  1.   

    本帖最后由 bdmh 于 2011-06-21 11:48:55 编辑
      

  2.   


    谢谢bdmh指导
    学校的东西忘光了,负数情况要如何处理?
      

  3.   

    re: 看看反算时,aArr[i] - bArr[i]是个整体运算符号优先顺序我应该没搞错`看起来问题应该是出在负数上,但又没一点头绪,正算时不是也有负数情况么减运算符结果 -1 转到 byte 是不是变成了 255
      

  4.   

    好像byte默认无符号,sbyte才是有符号和int uint正好相反
      

  5.   

    已解决,不用考虑负数情况byte[] aArr = { 113, 76, 155, 186, 152, 127, 248, 183 };
    byte[] bArr = new byte[8];byte[] key = { 0, 0, 0, 0, 0, 0, 0, 0 };
    for (int i = 0; i < 8; i++)
    {
        if (i > 0)
        {
            key[i % 8] = (byte)(key[i % 8] + aArr[i - 1] ^ (byte)i);
            bArr[i] = (byte)(aArr[i] - aArr[i - 1] ^ key[i % 8]);
        }
        else
        {
            bArr[i] = (byte)(aArr[i] ^ key[0]);
        }
    }Log(aArr, " aArr ");
    Log(bArr, " bArr ");
    Log(key, "  Key ");key = new byte[8];for (int i = 0; i < 8; i++)
    {
        if (i > 0)
        {
            key[i % 8] = (byte)(aArr[i] - aArr[i - 1] ^ bArr[i]);
            key[i % 8] = (byte)((byte)(key[i % 8] ^ (byte)i) - aArr[i - 1]);
        }
        else
        {
            key[0] = (byte)(aArr[i] ^ bArr[i]);
        }
    }
    Log(key, "CalcKey");
    [2011-6-21 12:22:25]:[ aArr ] 71 4C 9B BA 98 7F F8 B7 
    [2011-6-21 12:22:25]:[ bArr ] 71 AB 01 87 60 7A 00 40 
    [2011-6-21 12:22:25]:[  Key ] 00 70 4E 98 BE 9D 79 FF 
    [2011-6-21 12:22:25]:[CalcKey] 00 00 00 00 00 00 00 00 
    CSDN这个设置不好,,,自己不能编辑和回帖。。可以了,结帖`