Java教程

凯撒密码,维吉尼亚密码 java代码实现

本文主要是介绍凯撒密码,维吉尼亚密码 java代码实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、实验目的

(1).了解传统密码技术

(2).掌握对称密码体制

(3).理解密钥原理

(4).了解网络保密通信

2、实验原理与理论基础

对称式加密就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术目前被广泛采用,如美国政府所采用的DES加密标准就是一种典型的“对称式”加密法,它的Session Key长度为56Bits。

对称密码体制中加密密钥与解密密钥相同,解密算法是加密算法的逆运算。对于任意加密,需要输入明文与密钥,反之解密需要输入密文和密钥。

3、实验内容

(1)、编程实现对称加密之凯撒密码(指定任意k,不能取除数字之外),用任意编程语言实现,在下面实验过程中体现源代码运行截图(包括2个测试案例的运行界面);

(2)、编程实现对称加密之维吉尼亚密码,用任意编程语言实现,需在下面实验过程中体现源代码运行截图(至少包括2个测试案例运行界面);

4、实验过程

(1)凯撒密码

  源代码:

import java.util.Scanner;

public class Chi_SquareUtils{

    public static void main(String[] args) {

       System.out.println("请输入明文:");

       Scanner zx=new Scanner(System.in);//创建Scanner对象

       String z=zx.nextLine();

       System.out.println("请输入密钥:");

       Scanner zx1=new Scanner(System.in);

       int key=zx1.nextInt();//将下一输入项转换成int类型

       Encryption(z,key);//调用Encryption方法

    }

public static void Encryption(String str, int k) {

    String string="";

    for(int i=0;i<str.length();i++) {

       char c=str.charAt(i);

       if(c>='a'&&c<='z')//如果字符串中的某个字符是小写字母

       {

           c+=k%26;//移动key%26位

           if(c<'a')

              c+=26;//向左超界

           if(c>'z')

              c-=26;//向右超界

       }

       if(c>='A'&&c<='Z')//如果字符串中的某个字符是大写字母

       {

           c+=k%26;//移动key%26位

           if(c<'a')

              c+=26;//向左超界

           if(c>'z')

              c-=26;//向右超界

       }

       string +=c;//将解密后的字符连成字符串

    }

    System.out.println("加密后为:"+string);

}

}

  运行截图:

2)维吉尼亚密码

源代码:

import java.util.Scanner;

public class MultipleTableMima {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入密匙:");

        String s = scanner.next();

        MultipleTableMima mima = new MultipleTableMima();

        System.out.print("请输入明文:");

        String mingWen = scanner.next();

        String sl = mima.encryption(mingWen, s);

        System.out.println("加密后的密文是:"+sl);

    }

    /**

     * 加密

     * @param plaintext 明文

     * @param secretKey 密钥

     * @return 密文

     */

    public String encryption(String plaintext,String secretKey){

       String ciphertext = "";

        char[][] chars = new char[2][plaintext.length()];

        for (int i = 0; i <plaintext.length() ; i++) {

            chars[0][i]=plaintext.charAt(i);

            chars[1][i]=secretKey.toUpperCase().charAt(i%(secretKey.length()));

        }

        char[] charArray = plaintext.toCharArray();

        for (int i = 0; i <charArray.length ; i++) {

            int j = charArray[i];

            if (j>=97&&j<=97+26){

                int k = chars[1][i];

                char te = (char) (((j - 97) + (k - 65)) % 26+65);

                ciphertext = ciphertext+te;

            }

            if (j>=65&&j<=65+26){

                int k = chars[1][i];

                char te = (char) (((j - 65) + (k - 65)) % 26+97);

                ciphertext = ciphertext+te;

            }

        }

        return  ciphertext;

    }

}

运行截图:

  

这篇关于凯撒密码,维吉尼亚密码 java代码实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!