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

本文关键字:密钥 算法 解密 IDEA 128位 | 更新日期: 2023-09-27 18:07:53

我正试图在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;
}

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

解密密钥调度,使用相同的52个密钥倒序。

您必须按照以下顺序使用键:

Encryption: K1       K2  K3     K4      K5  k6  (round 1)
Decryption: k49^-1   -k50 -k51  k49^-1  k47 k48 (round 2)

我假设您已经使用k1k4与您的输入数据块进行了模乘法,并为k2k3进行了模加法。