Click here to Skip to main content
15,888,113 members
Please Sign up or sign in to vote.
1.00/5 (2 votes)
C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ISE_CR_S16
{
    public partial class DES : Form
    {
        int[] left = new int[32];
        int[] right = new int[32];
        int[] initial = new int[64];
        int[] expRight = new int[48];
        int[] key = new int[48];
        int[] xor = new int[48];
        int[] s = new int[32];
        int[][,] s1 = new int[8][,];
        int[] straightPer = new int[32];
        bool final = true;
        int[] outleft = new int[32];
        int[] outright = new int[32];
        int[] code = new int[64];
       
        public DES()
        {
            InitializeComponent();
            s1[0] = new int[,] { { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 }, { 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 }, { 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 }, { 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 } };
            s1[1] = new int[,] { { 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 }, { 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 }, { 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 }, { 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 } };
            s1[2] = new int[,] { { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 }, { 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 }, { 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 }, { 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 } };
            s1[3] = new int[,] { { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 }, { 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 }, { 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 }, { 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 } };
            s1[4] = new int[,] { { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 }, { 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6 }, { 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 }, { 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 } };
            s1[5] = new int[,] { { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 }, { 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 }, { 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 }, { 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 } };
            s1[6] = new int[,] { { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 }, { 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 }, { 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2 }, { 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 } };
            s1[7] = new int[,] { { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 }, { 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 }, { 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 }, { 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 } };
            key=new int[]{1,1,1,0,1,0,0,1,0,0,0,0,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,1,1,1,1};
         }

        private int[] ConvertToBits(byte[] bytes)
        {
            int[] bits = new int[bytes.Length * 8];
            for (int i = 0; i < bytes.Length; i++)
            {
                int temp = bytes[i];
                for (int j = 0; j <= 7; j++)
                {

                    bits[(7 - j) + (i * 8)] = temp % 2;
                    temp = temp / 2;

                }
            }
            return bits;
        }
        private byte[] ConvertFromBits(int[] bits)
        {
            byte[] bytes = new byte[bits.Length / 8];

            for (int i = 0; i < bytes.Length; i++)
            {
                byte value = 0;
                for (int j = 0; j < 8; j++)
                {
                    value += Convert.ToByte(bits[j + (i * 8)] * (Math.Pow(2, (7 - j))));
                }
                bytes[i] = value;
            }
            return bytes;
        }
        private byte GetValue(int[] bits)
        {

            byte value = 0;

            for (int i = 0; i < bits.Length; i++)
            {


                value += Convert.ToByte(bits[i] * (Math.Pow(2, (bits.Length - 1 - i))));


            }
            return value;
        }
        private int[] GetBits(int value)
        {
            int[] bits = new int[4];

            int temp = value;
            for (int j = 0; j <= 3; j++)
            {

                bits[(3 - j)] = temp % 2;
                temp = temp / 2;

            }

            return bits;
        }
        private void fu(ref int[] left, ref int[] right)
        {
            for (int j = 0; j < 32; j++)
            {
                expRight[(j + 1) + ((j / 4) * 2)] = right[j];
                if (((j + 1) % 4 == 0) && j != 31)
                {
                    expRight[(j + 3) + ((j / 4) * 2)] = right[j];
                    expRight[(j + 2) + ((j / 4) * 2)] = right[j + 1];
                }
                else
                {
                    if (j == 31)
                    {
                        expRight[47] = right[0];
                        expRight[0] = right[31];
                    }
                }
            }
            //second
            for (int i = 0; i < 48; i++)
            {
                if (expRight[i] == key[i])
                    xor[i] = 1;
                else
                    xor[i] = 0;
            }
            //third

            for (int i = 0; i <= 42; i += 6)
            {
                int[] x = { xor[i], xor[i + 5] };
                int[] y = { xor[i + 1], xor[i + 2], xor[i + 3], xor[i + 4] };
                byte row = GetValue(x);
                byte column = GetValue(y);
                int[] newValue = GetBits(s1[i / 6][row, column]);
                for (int u = 0; u < 4; u++)
                {
                    s[u + ((i / 6) * 4)] = newValue[u];
                }
            }
            //forth
            straightPer[0] = s[15];
            straightPer[1] = s[6];
            straightPer[2] = s[19];
            straightPer[3] = s[20];
            straightPer[4] = s[28];
            straightPer[5] = s[11];
            straightPer[6] = s[27];
            straightPer[7] = s[16];
            straightPer[8] = s[0];
            straightPer[9] = s[14];
            straightPer[10] = s[22];
            straightPer[11] = s[25];
            straightPer[12] = s[4];
            straightPer[13] = s[17];
            straightPer[14] = s[30];
            straightPer[15] = s[9];
            straightPer[16] = s[1];
            straightPer[17] = s[7];
            straightPer[18] = s[23];
            straightPer[19] = s[13];
            straightPer[20] = s[31];
            straightPer[21] = s[26];
            straightPer[22] = s[2];
            straightPer[23] = s[8];
            straightPer[24] = s[18];
            straightPer[25] = s[12];
            straightPer[26] = s[29];
            straightPer[27] = s[5];
            straightPer[28] = s[21];
            straightPer[29] = s[10];
            straightPer[30] = s[3];
            straightPer[31] = s[24];
            //fifth
            int[] temp = new int[32];
            if (!finalCheck.Checked)
            {
                for (int i = 0; i < 32; i++)
                {
                    temp[i] = right[i];
                }

                for (int i = 0; i < 32; i++)
                {
                    if (straightPer[i] == left[i])
                        right[i] = 1;
                    else
                        right[i] = 0;
                }
                for (int i = 0; i < 32; i++)
                {
                    left[i] = temp[i];
                }
            }
            else
            {

                for (int i = 0; i < 32; i++)
                {
                    if (straightPer[i] == left[i])
                        left[i] = 1;
                    else
                        left[i] = 0;
                }
            }

        }

        private void roundBtn_Click(object sender, EventArgs e)
        {
            string text = sourceTxt.Text;
            while (text.Length % 8 > 0)
            {
                text += " ";
            }
            byte[] chars = System.Text.Encoding.ASCII.GetBytes(text.ToCharArray());
            initial = ConvertToBits(chars);
            for (int i = 0; i < 32; i++)
            {
                left[i] = initial[i];
                right[i] = initial[i + 32];
            }
            fu(ref left, ref right);
            for (int i = 0; i < 32; i++)
            {
                code[i] = left[i];
                code[i + 32] = right[i];
            }
            string d = "";

            byte[] f = ConvertFromBits(code);
            d += System.Convert.ToBase64String(f);


            codingTxt.Text = d;
        }



        
    }
}


What I have tried:

I want to make another button to decrypt it the encrypted cipher using the 16 round of DES
Posted
Updated 4-Jan-17 23:58pm
v2
Comments
[no name] 3-Jan-17 8:33am    
We aren't here to do your homework for you.

1 solution

check this article

Encrypt and Decrypt Data with C#

https://www.codeproject.com/articles/14150/encrypt-and-decrypt-data-with-c
 
Share this answer
 
v2
Comments
Richard MacCutchan 5-Jan-17 7:14am    
Please use ordinary text for text, and clickable links for URIs.
Ayodeji Oluwatomiwo 5-Jan-17 7:47am    
corrected

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900