festel.cs

来自「Algorithm Festel. Programs read from fi」· CS 代码 · 共 156 行

CS
156
字号


namespace Festel
{
    class FestelAlg

    {
        public static ulong v;
        public static ulong[] k = new ulong[32];

        // Thuat toan Festel***********************************************************************
        public static void FestelEncode(ref ulong block1, ref ulong block2)
        {
            ulong tmp;
            for (int i = 0; i < 32; i++)
            {
                tmp = (block1 ^ v) ^ block2;
                block2 = block1;
                block1 = tmp;
            }
            tmp = block1;
            block1 = block2;
            block2 = tmp;        
            

        }
        // Viet lai
        public static void FestelClassis(ulong[] block)
        {
            ulong tmp;
            for (int i = 0; i < 32; i++)
            {
                tmp = ((block[0] ^ v) >> 9) ^ block[1];
                block[1] = block[0];
                block[0] = tmp;
            }
            tmp = block[1];
            block[1] = block[0];
            block[0] = tmp;
        }

        // Thuat toan Festel mo rong 1***********************************************************************

        public static void FestelEncode1(ref ulong block1, ref ulong block2, ref  ulong block3, ref  ulong block4)
        {
            ulong tmp;
            for (int i = 1; i <= 32; i++)
            {
                block4 = block1;
                block1 = (block1 ^ v) ^ block2;
                block2 = block3;
                block3 = block4;
            }
            tmp = block4;
            block2 = block1;
            block3 = block2;
            block4 = block3;
            block1 = tmp;

        }

        // Thuat toan Festel mo rong 2***********************************************************************

        public static void FestelEncode2(ref ulong block1, ref  ulong block2, ref  ulong block3, ref  ulong block4)
        {
            ulong tmp;
            for (int i = 0; i < 32; i++)
            {
                tmp = (block1 | block2 | block3) ^ block4;
                block4 = block1;
                block1 = block2;
                block2 = block3;
                block3 = tmp;
                
            }
            tmp = block4;
            block2 = block1;
            block3 = block2;
            block4 = block3;
            block1 = tmp;
        }
        // Thuat toan Festel mo rong 3***********************************************************************

        public static void FestelEncode3(ref ulong block1, ref  ulong block2, ref  ulong block3, ref  ulong block4)
        {
            ulong tmp1, tmp2, tmp3,tmp;
            for (int i = 1; i <= 32; i++)
            {
                tmp1 = (block1 ^ v) ^ block2;
                tmp2 = (tmp1 ^ block3);
                tmp3 = tmp2 ^ block4;

                block4 = block1;                
                block3 = tmp3;
                block2 = tmp2;
                block1 = tmp1;

            }
            tmp = block4;
            block2 = block1;
            block3 = block2;
            block4 = block3;
            block1 = tmp;

        }
        public static void FestelModif(ulong[] block, int flag)
        {
            ulong tmp;
            //32 rounds
            for (int i = 1; i <= 32; i++)
            {
                switch (flag)
                {
                        //type 1
                    case 1:
                        tmp = block[0];                        
                        block[0] = (block[0] ^ v) ^ block[1];
                        block[1] = block[2];
                        block[2] = block[3];
                        block[3] = tmp;
                        break;
                   //type 2
                    case 2:
                        tmp = (block[0] | block[1] | block[2]) ^ block[3];
                        block[3] = block[0];
                        block[0] = block[1];
                        block[1] = block[2];
                        block[2] = tmp;
                        break;
                    //type 3
                    case 3:
                        ulong tmp1, tmp2, tmp3;
                        tmp1 = (block[0] ^ v) ^ block[1];
                        tmp2 = (tmp1 ^ block[2]);
                        tmp3 = tmp2 ^ block[3];

                        block[3] = block[0];
                        block[2] = tmp3;
                        block[1] = tmp2;
                        block[0] = tmp1;
                        break;
                }
                //last
                tmp = block[3];
                block[3] = block[2];
                block[2] = block[1];
                block[1] = block[0];
                block[0] = tmp;

            }
        }
        // xu li file***********************************************************************
       
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?