• 维吉尼亚密码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();

               }

          }

    }

  • 相关阅读:
    javascript获取id元素
    小米供应链
    几个极限的证明
    第一章 实数
    当a在什么范围取值时,方程|x方-5x|=a有且只有两个相异实根
    壮壮的西城学探究里面的x=1,x=-1
    三角形的边长注意问题
    x方+x+1, x方-x+1无实根,不可能为0
    一个混合电路
    串联电路的电流处处相等
  • 原文地址:https://www.cnblogs.com/ljhoracle/p/longxuzi.html
Copyright © 2020-2023  润新知