维吉尼亚密码java完整版
package cn.longxuzi;
import org.junit.Test;
public class Chi_SquareUtils {
private static final ICUtils icUtils = new ICUtils();
/**
* @author信息111李继华(LiJiHua)
* @param String
* [][]ciphertext
* @return null
* @Date 2013-11-21 PM 19:23
* @copyright李继华所有
*/
@Test
public void chi_square() {
String[][] ciphertext = icUtils.devideCipherText();// 获取密文划分以后的每一小组的密文数组
String[] freList = { "A=8.167", "B=1.492", "C=2.782", "D=4.253",
"E=12.702", "F=2.228", "G=2.015", "H=6.049", "I=6.996",
"J=0.153", "K=0.772", "L=4.025", "M=2.406", "N=6.749",
"O=7.507", "P=1.929", "Q=0.095", "R=5.987", "S=6.327",
"T=9.056", "U=2.758", "V=0.978", "W=2.360", "X=0.150",
"Y=1.974", "Z=0.074" };// 频率分布表构成的字符串数组
int count = 0;// 计数器(计算每一个英文字母出现的次数)
double index = 0;// 临时存储每一组密文的X^2得到的值
double[] x = new double[ciphertext.length];// 创建存储每一组密文X值的double型数组容器
int[][] sum1 = new int[ciphertext.length][freList.length];// 创建用来存储每一组每个英文字母出现的次数的整形数组容器
double[][] sum2 = new double[ciphertext.length][freList.length];// 创建存储每一组每个密文字母的(C-E)/E值
for (int i = 0; i < ciphertext.length; i++) {// 第一层循环遍历根据密钥长度分成的每一小组密文
for (int j = 0; j < freList.length; j++) {// 第二层循环遍历频率分布表中每个字母在每一小组密文中是否出现以及它们的频率
String flag = freList[j].substring(0, 1);// 临时存储取到的第J个英文字母
double E = Double.parseDouble(freList[j].substring(2,
freList[j].length()));// 临时存储取到的第J个字母对应的频率值
for (int k = 0; k < ciphertext[0].length; k++) {// 第三层循环遍历每一个密文小组中每一个密文字母
if (flag.equals(ciphertext[i][k])) {// 根据字母表顺序依次判断每一个英文字母是否在密文小组中出现了
count++;// 如果出现,开始计数每一个英文字母在小组密文字母表中总共出现的次数
}
}
sum1[i][j] = count;// 赋值给用来存储字母出现次数的数组容器
count = 0;// 计数器清零
double dis = (double) (sum1[i][j] - E);
sum2[i][j] = (dis * dis) / E;
}
}
for (int i = 0; i < ciphertext.length; i++) {
for (int j = 0; j < freList.length; j++) {
index += sum2[i][j];
}
x[i] = index;
index = 0;
System.out.println("第" + (i + 1) + "小组的X值为" + Math.sqrt(x[i]));
}
}
// 以下是计算每一个密文小组X值的测试代码
public static void main(String[] args) {
while (true) {
Chi_SquareUtils ch = new Chi_SquareUtils();
ch.chi_square();
}
}
}
维吉尼亚密码java完整版的更多相关文章
- 维吉尼亚密码java代码实现根据密钥长度计算IC值过程
package cn.longxuzi; import java.util.Scanner; import org.junit.Test; public class ICUtils { /** * @ ...
- 维吉尼亚密码-攻防世界(shanghai)
维吉尼亚密码 维吉尼亚密码是使用一系列 凯撒密码 组成密码字母表的加密算法,属于多表密码的一种简单形式. 加密原理 维吉尼亚密码的前身,是我们熟悉的凯撒密码. 凯撒密码的加密方式是依靠一张字母表中的每 ...
- [CTF]维吉尼亚密码(维基利亚密码)
[CTF]维吉尼亚密码(维基利亚密码) ----------------------百度百科 https://baike.baidu.com/item/维吉尼亚密码/4905472?fr=aladdi ...
- Vigenère Cipher 维吉尼亚加解密算法
维吉尼亚的加解密有两种方法. 第一种是查表:第一行为明文,第一列为密钥,剩余的为对应的密文 第二种方法是转化计算法:逐个将字符转化为从零开始的数字,对数字进行加密/解密后,再转化为字符. 本文要用c+ ...
- [加密]C#实现维吉尼亚加密与解密(解密前提为已知密匙)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 随机练习:C#实现维吉尼亚加密与解密(解密前提为已知密匙)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- python 维吉尼亚
加密key='COMPUTER' plaintext='BLOCKCIPHERDESIGNPRINCIPLE' ascii='abcdefghijklmnopqrstuvwxyz'.upper() k ...
- python实现维吉尼亚解密
# -*-coding:UTF-8-*- from sys import stdout miwen = "KCCPKBGUFDPHQTYAVINRRTMVGRKDNBVFDETDGILTXR ...
- python实现维吉利亚密码加密(Vigenère cipher)
最近有个朋友问我关于维吉利亚密码如何用python实现加密,研究之后发现这是个挺好玩的东西,遂决定写篇博文记录一下. 一.何谓维吉利亚密码 第一列是密钥字母列,第一行是明文字母行.不难看出维吉利亚密码 ...
随机推荐
- 快速构建Windows 8风格应用27-漫游应用数据
原文:快速构建Windows 8风格应用27-漫游应用数据 本篇博文主要介绍漫游应用数据概览.如何构建漫游应用数据.构建漫游应用数据最佳实践. 一.漫游应用数据概览 1.若应用当中使用了漫游应用数据, ...
- NET Socket服务编程
smark https://github.com/IKende/ .NET Socket服务编程之-高效连接接入编 在.NET上编写网络服务深入都有2,3年了,而这些时间时如何在.NET里实现网络服务 ...
- leetcode第27题--Implement strStr()
Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if need ...
- 安装SQL Server 2008 - 初学者系列 - 学习者系列文章
本文介绍SQL Server 2008数据库的安装 1.从下列地址获取SQL Server 2008的副本 thunder://QUFlZDJrOi8vfGZpbGV8Y25fc3FsX3NlcnZl ...
- SSMS2008插件开发(2)--Microsoft Visual Studio 2008插件开发介绍
原文:SSMS2008插件开发(2)--Microsoft Visual Studio 2008插件开发介绍 由于开发SSMS2008插件是通过VS2008进行的,有必要先介绍一下VS2008的插件开 ...
- Byte[]、Image、Bitmap 之间的相互转换
原文:Byte[].Image.Bitmap 之间的相互转换 /// <summary> /// 将图片Image转换成Byte[] /// </summ ...
- WebService使用DataSetSurrogate压缩Dataset的序列化和解压反序列化传输 (转)
转自:http://blog.163.com/hehong0925@126/blog/static/1339333372012102242920521/ 在WebService中将dataset序列化 ...
- SQL Server 2008 允许远程链接,适用于广域网和局域网
用户在使用SQL Server 2008远程链接时,可能会弹出如下对话框: 在链接SQL服务器时发生网络链接错误或特定实例错误.SQL服务器不存在或者链接不成功.请验证用户名是否正确或SQL服务器是否 ...
- Dev的GridView中如何自动生成行号
这里提供一个方法,使用简单,只需将GridView传入,即可自动生成行号 public static void SetRowNumberIndicator(GridView gridView) { g ...
- DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)?
DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)? 阅读目录: 问题根源是什么? <领域驱动设计-软件核心复杂性应对之道>分层概念 Repositor ...