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;<
凯撒加密(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;<