队列的应用--凯撒加密法

本文介绍了凯撒加密法,一种基本的消息编码技术,通过字母表的固定位移进行加密。虽然易被破解,但使用重复密钥可以提高安全性。文章还鼓励读者尝试自行实现该算法。

凯撒加密法简介

  • 凯撒加密(Caesar cipher)是一种简单的消息编码方式:它根据字母表将消息中的每个字母移动常量位k。举个例子如果k等于3,则在编码后的消息中,每个字母都会向前移动3位:a会被替换为d;b会被替换成e;依此类推。字母表末尾将回卷到字母表开头。于是,w会被替换为z,x会被替换为a。
  • 遗憾的是凯撒加密法箱单容易破解。字母的移动只有26种可能,要破解密码,只需尝试各种密钥值,直到有一种可行为止。
  • 使用重复密钥可以对这种编码方式进行改进。这时不是将每个字母移动常数位,而是利用一个密钥值列表,将各个字母移动不同的位数。如果消息比密钥值列表更长,可以从头再次利用这个密钥列表。例如,假设密钥值列表为:
    3 1 7 4 2 5
    那么第一个字母移动3位,第二个字母移动1位,将第6个字母移动5位之后,会从头再次使用这个密钥列表。

代码实现

import java.util.LinkedList;
import java.util.Queue;

/**
 * 凯撒加密法
 * @author Administrator
 *
 */
public class Codes {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // 定义密钥列表
        int key[] = { 5, 12, -3, 8, -9, 4, 10 };
        Integer keyValue;
        String encoded = "", decoded = "";
        //要加密的字符串
        String message = "All programmers are playwrights and all computers are lousy actors";
        //定义两个对列,存放密钥列表,供加密和解密使用
        Queue<Integer> encodingQueue = new LinkedList<>();
        Queue<Integer> decodingQueue = new LinkedList<>();

        //将密钥列表存储到对列中
        for (int i = 0; i < key.length; i++) {
            encodingQueue.add(key[i]);
            decodingQueue.add(key[i]);
        }

        //加密算法
        for (int i = 0; i < message.length(); i++) {
            keyValue = encodingQueue.remove();
            encoded += (char) (message.charAt(i) + keyValue);
            encodingQueue.add(keyValue);
        }

        System.out.println("Encoded Message :\n" + encoded + "\n");

        //解密算法
        for (int i = 0; i < encoded.length(); i++) {
            keyValue = decodingQueue.remove();
            decoded +=(char) (encoded.charAt(i)-keyValue);
            decodingQueue.add(keyValue);
        }

        System.out.println("Decoded Message :\n" + decoded + "\n");
    }

}

运行结果
这里写图片描述

凯撒加密的算法简单,读者可自己封装一下。

一、所得税计算 1、功能要求 开发基于控制台的雇员所得税计算系统。具体要求如下: (1)从控制台读取雇员名称,工资和加班补贴。 (2)根据工资和加班补贴计算所得税。 (3)计算完毕后输出,输出内容需包括税前工资,税后工资,应纳所得税额。运行界面 2、类的设计 该系统中必须包括两个类,类名及属性设置如下。 雇员类(Employee)  名称(name)  工资(salary)  加班补贴(subsidy) 信息输入类(IncomeTax) 3、具体要求及推荐实现步骤 1、创建雇员类。 2、开发雇员类的计算所得税的方法。 3、开发所得税输入类,从控制台获得输入信息。 4、所得税的计算公式如下: 税前收入=工资+加班补贴 税后收入=税前收入-所得税额 所得税额 = 应纳税额 * 税率 二、凯撒加密器 1、功能要求 开发基于控制台的凯撒加密系统。具体要求如下: (1)根据用户的选择从控制台待加密或解密的字符串。如图-2和图-3所示。 (2)根据凯撒加密法,对字符串进行加密或解密。 (3)加密或解密完成后,把结果输出到控制台。如图-4和图-5所示。 图-2 操作选择界面 图-3 输入字符串界面 图-4 加密后的界面 图-5 解密后的界面 2、类的设计 该系统中必须包括三个类。 输入台控制类(Swither) Encryption(字符串加密类) Decryption(字符串解密类) 3、具体要求及推荐实现步骤 1、创建控制台控制类Switcher,用于和操作者交互。 2、开发加密类Encryption,使用凯撒加密法对字符串加密,并把加密后的结果返回给Switcher。 3、开发解密类Dncryption,使用凯撒加密法对字符串解密,并把解密后的结果返回给Switcher。 凯撒加密法,就是将字母表中的每个字母向后移动3位,比如a被替换成d,b被替换成f,以此类推。字母表的最后三位xyz,会被替换为abc。比如hello,加密之后是khoor.对于拉丁字母之外的其他字符,一律不加密
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值