队列应用之凯撒加密

本文介绍了凯撒加密(Caesar cipher)的基本原理及其简单的加密解密过程,然后通过Java实现了一个利用队列(LinkedQueue)进行密钥管理的凯撒加密和解密算法。队列的特点使得密钥可以重复使用,适用于较长的消息加密。文章还提供了加密解密的代码示例,并展示了对英文和中文字符串的加密解密效果。
摘要由CSDN通过智能技术生成
1.凯撒加密(Caesar cipher)简介
凯撒加密(Caesar cipher)是一种简单的消息编码方式:它根据字母表将消息中的每个字母移动常量位k。举个例子
如果k等于3,则在编码后的消息中,每个字母都会向前移动3位:a会被替换为d;b会被替换成f;依此类推。字母表末尾将回卷到字母表开头。于是,w会被替换为z,
x会被替换为a。
在解码消息的时候,每个字母会反方向移动同样的位数。因此,如果k等于3,下面这条编码后的消息:
vlpsolflwb iroorzv frpsohalwb
会被解码成:
simplicity follows complexity
朱丽叶斯.凯撒在他的一些机密政府通信中真正用到了这种加密。遗憾的是,凯撒加密相当容易被破解。字母的移动只有26种可能;要破解密码,只需尝试各种密钥值,
直到有一种可行即可。
使用重复密钥(repeating key)可以对这种编码技术做出改进,这时不再将每个字母移动常位数,而是利用一列密钥值将各个字母移动不同的位数。如果消息长于这列密钥
值,可以从头再次使用这列密钥。例如,假设密钥值为:
3     1      7     4     2     5
则第1个字母会移动3位,第2个字母会移动1位,依此类推,将第6个字母移动5位之后,我们会从头再次使用这列密钥。于是第7个字母会移动3位,第8个字母会移动
1位。反之解码的过程类似。
2.代码实现
我们都知道队列的特点是FIFO(先进先出),将密钥存储在队列 中,使用了一个密钥后,将这个密钥添加到队尾,这样较长的信息可以重复使用该密钥。
队列的JAVA代码实现如下:
/**
 * 链表队列的实现
 */
public class LinkedQueue {
    private LinearNode front;
    private LinearNode rear;
    private int size;
    /**
     * 入队操作
     * @param node
     */
    public void enqueue(LinearNode node) {
        if(0 == size) {
            front = rear = node;<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值