CaesarCipher凯撒密码

古典密码实验

一、实验目的

(1)理解简单单表代替加密算法的原理;
(2)通过实验,加深对古典密码体制的了解,掌握对字符进行灵活处理的方法;
(3)通过编写一个简单的凯撒(Caesar)密码加密和解密程序,了解加密和解密内部的过程和相关概念,通过编程寻找其解决方案,加深对相关知识点的理解;
(4)通过该实验可以使学生锻炼根据需要选择和使用信息技术工具获取信息的能力,达到课程目标的要求。

二、实验内容及要求

(1)掌握凯撒(Caesar)密码的原理,完成凯撒(Caesar)密码加解密程序的编写;
(2)根据凯撒(Caesar)密码的原理编写程序,对输入的符号串能够根据设置的密钥分别正确实现凯撒加密和解密功能。
(3)针对凯撒密码算法 , 取 密 钥 常 数k=13, 对 明 文M=MEETMEAFTERTOGAPARTY进行第一次加密,求出密文C1。第二次再对C1加密,得到C2。比较C1和C2,如果K不等于13,再比较C1和C2,这说明什么问题?(提示:凯撒密码的明密文字母表的映射公式:A为明文字母表,即英文字母表,B为密文字母表,i,j分别为英文字母表顺序,其映射关系为:j=i+k mod 26,比如当原文为W时,i为23,j为i+k mod 26等于10,所以密文为J)
(4)已知一个凯撒密码的密文如下:ASSHASOTHSFHCUODOFHM,请用穷举法求出明文。

三、实验数据和结果

(1)(2):

CaesarCipher类中的私有属性,代表密钥

private int miYao;
    public CaesarCipher(int miYao){
    
    
        this.miYao=miYao;
    }

CaesarCipher类中加密算法

public String jiaMi(String ming)
    {
    
    
        int size=ming.length();
        char[] mi;
        mi=ming.toCharArray();
        for (int i=0;i<size;i++)
        {
    
    
            mi[i]= (char) ((mi[i]-'A'+miYao)%26+'A');
        }
        return String.valueOf(mi);
    }

CaesarCipher类中解密算法

public String jieMi(String mi){
    
    
        int size=mi.length();
        char[] ming;
        ming=mi.toCharArray();
        for (int i=0;i<size;i++)
        {
    
    
            ming[i]= (char) ((ming[i]-'A'+(26-miYao))%26+'A');
        }
        return String.valueOf(ming);
    }

(3)实验代码

CaesarCipher caesarCipher=new CaesarCipher(13);
       String M="MEETMEAFTERTOGAPARTY";

       String C1=caesarCipher.jiaMi(M);
       System.out.println(C1);
       String C2=caesarCipher.jiaMi(C1);
       System.out.println(C2);

实验结果(k=13):

jieg

实验结果(k=12):

在这里插入图片描述
观察可得:当k=13并且加密两次就能得到明文。
由此可以得出结论:无论k的值取多少,在加密多次后一定可以得到未加密的明文从而使加密失效(最多为26次),所以凯撒密码是很不安全。

(4)由(3)的结论可知k的值并不重要所以设k=1让其加密26次即可得到明文,代码如下:

CaesarCipher caesarCipher1=new CaesarCipher(1);
        String A="ASSHASOTHSFHCUODOFHM";
        for(int i=0;i<26;i++)
        {
    
    
            A=caesarCipher1.jieMi(A);
            System.out.println(A);
        }

实验结果:

ZRRGZRNSGREGBTNCNEGL
YQQFYQMRFQDFASMBMDFK
XPPEXPLQEPCEZRLALCEJ
WOODWOKPDOBDYQKZKBDI
VNNCVNJOCNACXPJYJACH
UMMBUMINBMZBWOIXIZBG
TLLATLHMALYAVNHWHYAF
SKKZSKGLZKXZUMGVGXZE
RJJYRJFKYJWYTLFUFWYD
QIIXQIEJXIVXSKETEVXC
PHHWPHDIWHUWRJDSDUWB
OGGVOGCHVGTVQICRCTVA
NFFUNFBGUFSUPHBQBSUZ
//
MEETMEAFTERTOGAPARTY
//
LDDSLDZESDQSNFZOZQSX
KCCRKCYDRCPRMEYNYPRW
JBBQJBXCQBOQLDXMXOQV
IAAPIAWBPANPKCWLWNPU
HZZOHZVAOZMOJBVKVMOT
GYYNGYUZNYLNIAUJULNS
FXXMFXTYMXKMHZTITKMR
EWWLEWSXLWJLGYSHSJLQ
DVVKDVRWKVIKFXRGRIKP
CUUJCUQVJUHJEWQFQHJO
BTTIBTPUITGIDVPEPGIN
ASSHASOTHSFHCUODOFHM

所以其明文为MEET ME AFTER TOGA PARTY

四、实验中遇到的问题及解决(或未解决)的方案

凯撒密码属于替代密码而且是最简单的一种密码,在实验过程中并没有遇到什么问题。

猜你喜欢

转载自blog.csdn.net/BeiWoFW/article/details/129714462