[加密]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[26, 26];
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 = 0; i < 26; i++)
{
for (int j = 0; j < 26; j++)
{
int number = 65 + i + j;
if (number > 90)
{
number -= 26;
}
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 = 0; i < key.Length; i++)
{
string str = key.Substring(i, 1);
keyNum.Add((int)ascii.GetBytes(str)[0] - 65);
}
int index = -1;
for (int i = 0; i < this.text.Length; i++)
{
if (this.text.Substring(i, 1).ToString() == " ")
{
code += " ";
continue;
}
index++;
code += matrix[keyNum[index % key.Length], (int)ascii.GetBytes(this.text.Substring(i, 1))[0] - 65];
}
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 = 0; i < key.Length; i++)
{
string str = key.Substring(i, 1);
keyNum.Add((int)ascii.GetBytes(str)[0] - 65);
}
int index = -1;
for (int i = 0; i < this.code.Length; i++)
{
if (this.code.Substring(i, 1).ToString() == " ")
{
text += " ";
continue;
}
index++;
for (int j = 0; j < 26; j++)
{
if (this.code.Substring(i, 1).ToString() == matrix[keyNum[index % key.Length], j])
{
byte[] bt = new byte[] { (byte)(j + 65) };
text += ascii.GetString(bt);
}
}
}
this.txtText.Text = text.ToString();
}
}
}
对于维吉尼亚方阵及运用维吉尼亚方阵的加密与解密,可参考http://baike.baidu.com/view/270838.htm?fromTaglist
画面结果如下:
转自:http://www.cnblogs.com/coding4love/p/3296703.html
[加密]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 ...
- 【福吧资源网整理】老男孩-python运维6期 不加密
老男孩-python运维6期 不加密,连夜整理出来分享给大家老男孩的python教程确实不错. 教程目录: 下载地址:http://www.fu83.cn/thread-204-1-1.html
随机推荐
- 线程停止与volatile
1.使用标志位停止线程 在Java中希望停止线程,可以使用设置标志位的方法,如下例所示: class SimpleTask implements Runnable{ private boolean s ...
- 操作系统内核Hack:(四)内核雏形
操作系统内核Hack:(四)内核雏形 在本系列的前一篇文章<操作系统内核Hack:(三)BootLoader制作>中,我们制作出了一个两阶段引导BootLoader,并进入了一个内核的空壳 ...
- 分布式一致性协议Raft原理与实例
分布式一致性协议Raft原理与实例 1.Raft协议 1.1 Raft简介 Raft是由Stanford提出的一种更易理解的一致性算法,意在取代目前广为使用的Paxos算法.目前,在各种主流语言中都有 ...
- Jedis分片Sentinel连接池实验
Jedis分片Sentinel连接池实验 1.起因 众所周知,Redis官方HA工具Sentinel已经问世很久了,但令人费解的是,Jedis官方却迟迟没有更新它的连接池.到目前Maven库中最新的2 ...
- 计算机网络之IP协议族
网际协议IP 与IP协议配套使用的还有三个协议: 地址解析协议 ARP (Address Resolution Protocol) 网际控制报文协议 ICMP (Internet Control ...
- Java异常处理-----自定义异常
自定义异常 问题:现实中会出现新的病,就需要新的描述. 分析: java的面向对象思想将程序中出现的特有问题进行封装. 案例: 定义功能模拟凌波登录.(例如:lb(String ip))需要接收ip地 ...
- Spring之ORM模块
ORM模块对Hibernate.JDO.TopLinkiBatis等ORM框架提供支持 ORM模块依赖于dom4j.jar.antlr.jar等包 在Spring里,Hibernate的资源要交给Sp ...
- Xcode8出现的一些常见问题
消除无用输出语句问题:Xcode8之后,新创建的项目在手机上运行后,就会在输出窗口,输出一大堆乱七八糟的日志,对我们几乎没有用,如图: 解决办法: [product]-[scheme]-[Edit S ...
- The type org.apache.http.HttpResponse cannot be resolved. It is indirectly referenced from required
在Android 6.0(API 23)中,Google已经移除了移除了Apache HttpClient相关的类.HttpResponse类.缺失jar包使用HttpResponse等会报错: Th ...
- Android开发学习之路--RxAndroid之初体验
学了一段时间android,看了部分的项目代码,然后想想老是学基础也够枯燥乏味的,那么就来学习学习新东西吧,相信很多学java的都听说过RxJava,那么android下也有RxAndroid. Rx ...