0

どのように機能するかを学ぶためだけに、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;
}
4

2 に答える 2