随机练习: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 Vigenere
{
public partial class Form1 : Form
{
private string[,] matrix = new string[, ];
private ASCIIEncoding ascii = new ASCIIEncoding(); //key
private string key;
//code
private string code;
//text
private string text; public Form1()
{
InitializeComponent();
#region Generate Virginia Martix
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
int number = + i + j;
if (number > )
{
number -= ;
}
byte[] bt = new byte[] { (byte)number };
matrix[i, j] = ascii.GetString(bt);
}
}
#endregion
}
//加密
private void button1_Click(object sender, EventArgs e)
{
key = this.txtKey.Text.ToString().ToUpper();
code = "";
text = this.txtText.Text.ToString().ToUpper();
List<int> keyNum = new List<int>(); ; for (int i = ; i < key.Length; i++)
{
string str = key.Substring(i, );
keyNum.Add((int)ascii.GetBytes(str)[] - );
} int index = -;
for (int i = ; i < this.text.Length; i++)
{
if (this.text.Substring(i, ).ToString() == " ")
{
code += " ";
continue;
}
index++;
code += matrix[keyNum[index % key.Length], (int)ascii.GetBytes(this.text.Substring(i, ))[] - ];
} this.txtCode.Text = code.ToString();
}
//解密
private void button2_Click(object sender, EventArgs e)
{
key = this.txtKey.Text.ToString().ToUpper();
code = this.txtCode.Text.ToString().ToUpper();
text = "";
List<int> keyNum = new List<int>(); ; for (int i = ; i < key.Length; i++)
{
string str = key.Substring(i, );
keyNum.Add((int)ascii.GetBytes(str)[] - );
} int index = -;
for (int i = ; i < this.code.Length; i++)
{
if (this.code.Substring(i, ).ToString() == " ")
{
text += " ";
continue;
}
index++; for (int j = ; j < ; j++)
{
if (this.code.Substring(i, ).ToString() == matrix[keyNum[index % key.Length], j])
{
byte[] bt = new byte[] { (byte)(j + ) };
text += ascii.GetString(bt);
}
}
} this.txtText.Text = text.ToString();
}
}
} 对于维吉尼亚方阵及运用维吉尼亚方阵的加密与解密,可参考http://baike.baidu.com/view/270838.htm?fromTaglist 画面结果如下:

Q8D_K9D3TL9K98{470PS.jpg)
随机练习:C#实现维吉尼亚加密与解密(解密前提为已知密匙)的更多相关文章
- [加密]C#实现维吉尼亚加密与解密(解密前提为已知密匙)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- [CTF]维吉尼亚密码(维基利亚密码)
[CTF]维吉尼亚密码(维基利亚密码) ----------------------百度百科 https://baike.baidu.com/item/维吉尼亚密码/4905472?fr=aladdi ...
- Vigenère Cipher 维吉尼亚加解密算法
维吉尼亚的加解密有两种方法. 第一种是查表:第一行为明文,第一列为密钥,剩余的为对应的密文 第二种方法是转化计算法:逐个将字符转化为从零开始的数字,对数字进行加密/解密后,再转化为字符. 本文要用c+ ...
- 维吉尼亚密码-攻防世界(shanghai)
维吉尼亚密码 维吉尼亚密码是使用一系列 凯撒密码 组成密码字母表的加密算法,属于多表密码的一种简单形式. 加密原理 维吉尼亚密码的前身,是我们熟悉的凯撒密码. 凯撒密码的加密方式是依靠一张字母表中的每 ...
- python 维吉尼亚
加密key='COMPUTER' plaintext='BLOCKCIPHERDESIGNPRINCIPLE' ascii='abcdefghijklmnopqrstuvwxyz'.upper() k ...
- 维吉尼亚密码java代码实现根据密钥长度计算IC值过程
package cn.longxuzi; import java.util.Scanner; import org.junit.Test; public class ICUtils { /** * @ ...
- 维吉尼亚密码java完整版
package cn.longxuzi; import org.junit.Test; public class Chi_SquareUtils { private static final ICUt ...
- python实现维吉尼亚解密
# -*-coding:UTF-8-*- from sys import stdout miwen = "KCCPKBGUFDPHQTYAVINRRTMVGRKDNBVFDETDGILTXR ...
- JAVA-集合作业-已知有十六支男子足球队参加2008 北京奥运会。写一个程序,把这16 支球队随机分为4 个组。采用List集合和随机数
第二题 已知有十六支男子足球队参加2008 北京奥运会.写一个程序,把这16 支球队随机分为4 个组.采用List集合和随机数 2008 北京奥运会男足参赛国家: 科特迪瓦,阿根廷,澳大利亚,塞尔维亚 ...
随机推荐
- 「BZOJ 1831」「AHOI 2008」逆序对「贪心」
题意 给定一个长度为\(n\),值域为\([1,k]\),某些位置不确定的数组,求最小的逆序对.\(n\leq 10^4, k \leq 100\) 题解 这题有人用前缀和优化\(dp\)过了,但是这 ...
- 设计一个MQ的考虑点
转自: https://segmentfault.com/a/1190000004461970 序 这里总结下MQ的研究点,以及如果要自己设计一个MQ应该考虑的因素. 考虑点 1.远程通信功能 (1) ...
- winform按钮文字换行
用button的Bounds属性 btn.Bounds = new Rectangle(new Point(5 + i * 143, 25), new Size(100, 60));
- P4213 【模板】杜教筛(Sum) min_25筛
\(\color{#0066ff}{ 题目描述 }\) 给定一个正整数\(N(N\le2^{31}-1)\) 求 \(ans_1=\sum_{i=1}^n\varphi(i)\) \(ans_2=\s ...
- P5056 【模板】插头dp
\(\color{#0066ff}{ 题目描述 }\) 给出n*m的方格,有些格子不能铺线,其它格子必须铺,形成一个闭合回路.问有多少种铺法? \(\color{#0066ff}{输入格式}\) 第1 ...
- P3369 【模板】普通平衡树(权值线段树)
原来线段树还有这种操作(开成一个桶) 用区间维护在这个区间内元素的个数,离散化一下,居然能达到splay的效果 不仅码量大大减少,而且跑的飞快!!! 6种操作 200多ms 插入 xx 数 删除 x ...
- 缩点【洛谷P2921】 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
[洛谷P2921] [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N< ...
- 暴力【bzoj2208】: [Jsoi2010]连通数
2208: [Jsoi2010]连通数 暴力过的. 没脸说... 正解好像是缩点+递推. 应该也不难写. code: #include <iostream> #include <cs ...
- Codeforces Round #533 (Div. 2) 部分题解A~D
A. Salem and Sticks 题目描述 Salem gave you n n n sticks with integer positive lengths a1,a2,…,an a_1, a ...
- Qt 学习之路 2(17):文件对话框
Home / Qt 学习之路 2 / Qt 学习之路 2(17):文件对话框 Qt 学习之路 2(17):文件对话框 豆子 2012年9月24日 Qt 学习之路 2 85条评论 在前面的章节中 ...