如何从128位密钥生成IDEA算法的解密密钥?

时间:2013-04-08 06:59:13

标签: c# encryption cryptography key

我正在尝试在C#中实现IDEA算法,只是为了了解它是如何工作的。我使用了128位二进制密钥,并使用以下代码生成了52个加密密钥:

static ushort[] getKeys(string binaryKey)
{
        ushort[] keys = new ushort[52];
        int index = 0;
        while (true)
        {
            int bitPos = 0;
            keys[index++] = Convert.ToUInt16(binaryKey.Substring(bitPos, 16), 2);
            bitPos += 16;
            keys[index++] = Convert.ToUInt16(binaryKey.Substring(bitPos, 16), 2);
            bitPos += 16;
            keys[index++] = Convert.ToUInt16(binaryKey.Substring(bitPos, 16), 2);
            bitPos += 16;
            keys[index++] = Convert.ToUInt16(binaryKey.Substring(bitPos, 16), 2);
            bitPos += 16;
            if (index == 52)
                break;
            keys[index++] = Convert.ToUInt16(binaryKey.Substring(bitPos, 16), 2);
            bitPos += 16;
            keys[index++] = Convert.ToUInt16(binaryKey.Substring(bitPos, 16), 2);
            bitPos += 16;
            keys[index++] = Convert.ToUInt16(binaryKey.Substring(bitPos, 16), 2);
            bitPos += 16;
            keys[index++] = Convert.ToUInt16(binaryKey.Substring(bitPos, 16), 2);
            bitPos += 16;
            binaryKey = binaryKey.Substring(25) + binaryKey.Substring(0, 25);
        }
        return keys;
}

我相信这个函数会返回正确的值(我无法测试它们,但它们是在界限内)。现在,我无法理解如何获得这些解密密钥。我也找不到足够的文字。

修改: 这是我用来生成解密密钥的方法 -

static ushort[] generateDecryptionKeys(ushort[] encKeys)
{
        ushort[] decKeys = new ushort[52];

        for (int i = 0; i < 52; )
        {
            decKeys[i++] = (ushort)GetModMulInv(encKeys[52 - i], 65537);
            decKeys[i++] = (ushort)AdditiveInv(encKeys[52 - i]);
            decKeys[i++] = (ushort)AdditiveInv(encKeys[52 - i]);
            decKeys[i++] = (ushort)GetModMulInv(encKeys[52 - i], 65537);
            if (i == 52) break;
            decKeys[i++] = encKeys[52 - i];
            decKeys[i++] = encKeys[52 - i];
        }

        return decKeys;
}

2 个答案:

答案 0 :(得分:0)

解密密钥计划以相反的顺序使用相同的52个密钥。

答案 1 :(得分:0)

您必须按以下顺序使用密钥:

memcpy()

我假设您使用Encryption: K1 K2 K3 K4 K5 k6 (round 1) Decryption: k49^-1 -k50 -k51 k49^-1 k47 k48 (round 2) k1对您的输入数据块以及k4k2的模数加法进行了模乘。