⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 festel.cs

📁 Algorithm Festel. Programs read from file to array byte[]. key block = 64 data block = 128 if use
💻 CS
字号:


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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -