基於C#實現-維吉尼亞密碼加密、解密
前提是要有金鑰
- 程式碼只是實現基本原理,未做錯誤處理,如果出錯了看一下自己輸入的是不是有問題。
- 不區分大小寫輸入,以大寫的方式輸出
- C#程式碼線上生成器,注意在下方標識處輸入你的明文,或者密文,然後複製到 線上生成器
- 未做空格處理,輸入的時候不要有空格
using System;
using System.Threading;
namespace 密碼01
{
class Program
{
public static string zimu = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static char[] charzimu = zimu.ToCharArray();
static void Main(string[] args)
{
Console.WriteLine("選擇模式:a——加密,b——解密 並按下空格,只能輸入一個");
if (Console.ReadLine() == "a")
{
Console.Clear();
Console.WriteLine("進入加密模式");
Console.Write("請輸入明文:");
string mingwen = Console.ReadLine();
mingwen = mingwen.ToUpper();
Console.Write("請輸入金鑰:");
string miyao = Console.ReadLine();
miyao =miyao.ToUpper();
Console.Write("你所得到的密文是:");
string text = JiaMi(mingwen, miyao);
Console.WriteLine(text);
}
else if (Console.ReadLine() == "b")
{
Console.Clear();
Console.WriteLine("進入解密模式");
Console.Write("請輸入密文:");
string miwen = Console.ReadLine();
miwen =miwen.ToUpper();
Console.Write("請輸入金鑰:");
string miyao = Console.ReadLine();
miyao = miyao.ToUpper();
Console.Write("你所得到的明文是:");
string text = JieMi(miwen, miyao);
Console.WriteLine(text);
}
else
{
Console.WriteLine("請重啟程式,輸入a或者b選擇模式");
}
}
#region 解密部分
public static string JieMi(string miwen, string miyao)
{
char[] newmiyao = PiPei(miwen, miyao);
for (int i = 0; i < miwen.Length; i++)
{
int hanghao = zimu.IndexOf(newmiyao[i]);
newmiyao[i] = ZhaoZiMu(hanghao, newmiyao[i]);
}
string text = new string(newmiyao);
return text;
}
public static char[] GuoCheng(string a, char[] b)
{
char[] ch = a.ToCharArray();
for (int i = 0; i < a.Length; i++)
{
int hanghao = zimu.IndexOf(b[i]);
ch[i] = ZhaoZiMu(hanghao, b[i]);
}
return ch;
}
public static char ZhaoZiMu(int hang, Char ch)
{
string text = PaiHang(hang);
int e = text.IndexOf(ch);
return charzimu[e];
}
#endregion
#region 加密部分
public static string JiaMi(string mingwen, string miyao)
{
char[] newmiyao = PiPei(mingwen, miyao);
char[] ch = mingwen.ToCharArray();
for (int i = 0; i < mingwen.Length; i++)
{
int hanghao = zimu.IndexOf(newmiyao[i]);//金鑰的字母和行的字母進行比較,然後把所在位置拿出來
int lie = zimu.IndexOf(ch[i]);
ch[i] = JiaMiZiMu(hanghao, lie);//匹配行的字母然後找到所對應列的號,在把列號裡的字母取出來
}
string text = new string(ch);
return text;
}
public static char JiaMiZiMu(int hanghao, int lie)
{
string str = PaiHang(hanghao);
char ch = str[lie];
return ch;
}
#endregion
#region 公用
public static char[] PiPei(string a, string b)
{
char[] ch = a.ToCharArray();//將字串轉換為字元陣列
for (int i = 0; i < a.Length; i++)
{
ch[i] = b[i % b.Length];
}//ch[]裝的是變換完的金鑰
return ch;
}
public static string PaiHang(int hang)//重新排列行的字母序列
{
return zimu.Substring(hang) + zimu.Substring(0, hang);
}
#endregion
}
}
相關文章
- 維吉尼亞密碼密碼
- Go 如何實現 PHP 的密碼加密解密GoPHP密碼加密解密
- 序列密碼的加密與解密密碼加密解密
- PHP實現摩斯電碼加密解密PHP加密解密
- 文字加密:常見的密碼加密解密方法加密密碼解密
- java程式碼實現對excel加密、解密(設定或去除開啟密碼)JavaExcel加密解密密碼
- 基於RSA的WEB前端密碼加密方案Web前端密碼加密
- 教你如何基於python實現指令碼加密Python指令碼加密
- 美國西弗吉尼亞州完成首例基於區塊鏈的州選舉投票區塊鏈
- app直播原始碼,android AES加密解密實現APP原始碼Android加密解密
- Base64編碼解析以及加密、解密實現加密解密
- Base64加密解密原理以及程式碼實現加密解密
- C# 實現記住密碼功能C#密碼
- 密碼學系列——常見的加密方式(c#程式碼實操)密碼學加密C#
- C# MD5 加密,解密C#加密解密
- iOS端基於RSA公鑰加密和解密iOS加密解密
- 追溯解密基於 SSL 加密的 RDP 會話解密加密會話
- 弗吉尼亞理工大學&Dashlane:研究表明大多數人建立的密碼仍很糟糕密碼
- 一個C#封裝的加密解密類程式碼C#封裝加密解密
- Dotnet core結合jquery的前後端加密解密密碼密文傳輸的實現jQuery後端加密解密密碼
- C#基於RSA加密演算法實現軟體註冊實戰演練C#加密演算法
- oracle 密碼解密Oracle密碼解密
- delphi加密C#解密(AES-256)加密C#解密
- 使用Java加密與解密實現步驟Java加密解密
- java實現DES資料加密與解密Java加密解密
- 加密、解密詳解及CA的實現加密解密
- java 實現 DES加密 解密演算法Java加密解密演算法
- 如何在 Linux 上用密碼加密和解密檔案Linux密碼加密解密
- 2,javase程式碼實戰-運算子——位運算實現加密解密 (一)Java加密解密
- java使用DES加密方式,實現對資料的加密解密Java加密解密
- c#使用SHA256演算法實現對檔案的加密和解密C#演算法加密解密
- Linux基於tar與openssl加密解密壓縮包Linux加密解密
- app直播原始碼,Node.js實現密碼雜湊加密APP原始碼Node.js密碼加密
- JAVA和C# 3DES加密解密JavaC#3D加密解密
- C#中base64之加密解密C#加密解密
- 通過Go實現AES加密和解密工具Go加密解密
- 串的基本運算實現-加密解密串加密解密
- 實現客戶端加密,後臺解密薦客戶端加密解密