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

📄 code.cs

📁 古典加密的概要设计报告和源程序
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;

namespace code
{
    class Code
    {
        public string plaintText;//明文
        public string  cipher;//暗文
        public string key;// 密钥

        public Code(string a, string b, string c)
        {
            plaintText = a;
            cipher = b;
            key = c;
        }//构造函数

        public string changep(string a)
        {

            int lenth = a.Length;
            string s1;
            int k;
            char  b;
            k = Convert.ToInt16( key);
            s1 = "";
            for(int i = 0;i<lenth;i++ ){
                if (!a[i].Equals(' '))
                    b = Convert.ToChar(a[i] + k);
                else b = a[i];
                if (b > 'z')
                    b = Convert.ToChar(b - 26);
                s1 += Convert.ToString( b);
            }
            return s1;
        }//移位密码加密

        public string changec(string a) {
            int lenth = a.Length;
            string s1;
            int k;
            char b;
            k = Convert.ToInt16(key);
            s1 = "";
            for (int i = 0; i < lenth; i++)
            {
                if (!a[i].Equals(' '))
                    b = Convert.ToChar(a[i] - k);
                else b = a[i];
                if (!b.Equals(' ')&&b < 'a')
                    b = Convert.ToChar(b + 26);
                s1 += Convert.ToString(b);
            }
            return s1;
        }//移位密码解密

        public Boolean judge(string b)
        {
            string[] k = b.Split(',');
            int k1, k2;
            k1 = Convert.ToInt16(k[0]);
            k2 = Convert.ToInt16(k[1]);
       
            int[] n = new int[13];
            for (int i = 0; i <= 12; i++)
            {
                if(i == 6)continue;
                n[i] = i * 2 + 1; 
            }
            n[6] = 0;
            for(int i = 0 ;i<= 12;i++) 
            {
                if (i == 6) continue;
                if (n[i] == k1) return true;
            }
            return false;
        }// 仿射密码判断密钥是否合法

       public string changep1(string a,string b) {
            string[] k = b.Split(',');
            int k1, k2;
            k1 = Convert.ToInt16(k[0]);
            k2 = Convert.ToInt16(k[1]);
            int lenth = a.Length;
            string s1 = "";
            char b1;
            for (int i = 0; i < lenth; i++)
            {
                if (!a[i].Equals(' '))
                    b1 = Convert.ToChar((Convert.ToInt16(a[i] - 97) * k1 + k2) % 26 + 97);
                else b1 = a[i];
                    s1 += Convert.ToString(b1);
            }
            return s1;
        }//仿射密码加密

        public int findk(int k)
        {
         int[] n = new int[13];
            for (int i = 0; i <= 12; i++)
            {
                if(i == 6)continue;
                n[i] = i * 2 + 1; 
            }
            n[6] = 0;
            for(int i = 0;i<=12;i++)
            {
               if(k * n[i] % 26 == 1)
                   return n[i];
            }
            return 0;
        }//仿射密码寻找解密密钥

        public string changec1(string a, string b) 
        {
            string[] k = b.Split(',');
            int k1, k2,k3;
            k3 = Convert.ToInt16(k[0]);
            k2 = Convert.ToInt16(k[1]);
            k1 = findk(k3);
            int lenth = a.Length;
            string s1 = "";
            char b1;
            for (int i = 0; i < lenth; i++)
            {
                if (!a[i].Equals(' '))
                    b1 = Convert.ToChar(((k1 * (Convert.ToInt16(a[i]) - 97 - k2)) + 26 * k2) % 26 + 97);
                 else b1 = a[i];
                    s1 += Convert.ToString(b1);
            }
            return s1;
        }//仿射密码解密

        public string changep2(string a, string b) 
        {
            int lenth1 = a.Length;
            int lenth2 = b.Length;
            char b1;
            string s1 = "";
            int spacecount = 0;

           for (int i = 0; i < a.Length; i++)
            {
                if (a[i] == ' ')
                {
                    spacecount++;
                    b1 = a[i];
                }
                else b1 = Convert.ToChar(Convert.ToInt16((a[i] + b[(i - spacecount) % lenth2] - 97 - 97) % 26) + 97);
                s1 += Convert.ToString(b1);
            }
                return s1;
        }//维吉尼亚密码加密

        public string changec2(string a, string b)
        {
            int lenth1 = a.Length;
            int lenth2 = b.Length;
            char b1;
            string s1 = "";
            int spacecount = 0;
            for (int i = 0; i < a.Length; i++) 
            {
                if (a[i] == ' ')
                {
                    spacecount++;
                    b1 = a[i];
                }
                else b1 = Convert.ToChar(Convert.ToInt16((a[i] - b[(i - spacecount) % lenth2]+26) % 26) + 97);
                s1 += Convert.ToString(b1);
            }
            return s1;
        }//维吉尼亚密码解密

        public string changep3(string a, string b) 
        {
            string[] k = b.Split(',');
            int lenth = a.Length;
            char b1;
            string s1 = "";
            int spacecount = 0;
            int j = 0;
            for (int i = 0; i < lenth/6; i++) 
            {
                for (int l = 0; l < 6; l++)
                {
                    if (a[i] == ' ')
                    {
                        spacecount++;
                        b1 = a[i];
                    }
                    else
                    {
                        b1 = Convert.ToChar(a[Convert.ToInt16(k[j % 6]) - 1+i*6]);
                        j++;
                    }

                    s1 += Convert.ToString(b1);
                }
            }
            return s1;
        }//置换密码加密

        public string changec3(string a, string b) 
        {
            string[] k1 = b.Split(',');
            int lenth = a.Length;
            char b1;
             string s1 = "";
            int spacecount = 0;
            int j = 0;
            int[] k = new int[6];
            for (j = 0; j < 6; j++) 
            {
                k[Convert.ToInt16( k1[j]) - 1] = j + 1;
            }
             j = 0;
                for (int i = 0; i < lenth / 6; i++)
                {
                    for (int l = 0; l < 6; l++)
                    {
                        if (a[i] == ' ')
                        {
                            spacecount++;
                            b1 = a[i];
                        }
                        else
                        {
                            b1 = Convert.ToChar(a[k[j % 6] -1 + i * 6]);
                            j++;
                        }

                        s1 += Convert.ToString(b1);
                    }
                }
            return s1; 
        }//置换密码解密
    } 
}

⌨️ 快捷键说明

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