如何让我的Caesar密码加密其加密?

时间:2014-03-08 18:57:54

标签: java encryption

我正在尝试使用Caesar密码程序来加密其加密。我从这段代码开始:

import java.util.*;
public class Codes{

/**
 * Encode and decode a message using a key of values stored in 
 * a queue.
 */

public static void main(String[] args)
{
    int[] key = {7, 6, 5, 2, 8, 5, 8, 6, 4, 1};
    Integer keyValue;
    String encoded = "", decoded = "";
    String message = "Queues are useful for encoding messages";
    Queue<Integer> encodingQueue = new LinkedList<Integer>();
    Queue<Integer> decodingQueue = new LinkedList<Integer>();

    //load key queues

    for (int scan = 0; scan < key.length; scan++)
    {
        encodingQueue.add(key[scan]);
        decodingQueue.add(key[scan]);
    }

    //encode message
    {
        for (int scan = 0; scan < message.length(); scan++)
        {
            keyValue = encodingQueue.remove();
                encoded += (char) (message.charAt(scan) + keyValue);
                encodingQueue.add(keyValue);
        }

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

    //decode message
    {
        for (int scan = 0; scan < encoded.length(); scan++)
        {
            keyValue = decodingQueue.remove();
            decoded += (char) (encoded.charAt(scan) - keyValue);
            decodingQueue.add(keyValue);
        }

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


    }

  }

}

基本上我想要对编码的消息进行编码并对其进行编码以获得第二级加密,并且总共执行5次。 然后我想逐步解码消息,所以采用最新的编码版本并将其向后工作到第4个编码版本,然后到第3个等,直到消息被解码回其原始状态。 我还想打印每个编码和解码版本的消息。

1 个答案:

答案 0 :(得分:2)

复合替换密码(Caeser或Vigenere)实际上并没有改善加密。它只是创建了一个不同的有效密钥。

考虑Caeser密码(仅涉及将字母向左或向右移动给定量)。如果使用1个字符移位的键,则A变为B,B变为C,依此类推。一个2字符移位的键有A成为C,B成为D等等。但是,如果你同时应用它们(无论什么顺序),那么你所做的就是做两倍的工作来创建一个有效的替换3个字符移位的关键... A变成D.如果你完成数学运算,你最终会看到Vigenere密码具有相同的属性。将有一种机制将所有密钥组合在一起,并创建从密码文本到纯文本的单个替换,使您的额外工作毫无意义。

问题是,试图攻击密码的人并不关心你最初是如何进行加密的。他们只关心找到产生明文的任何键。因此,他们的工作将不会更加困难,因为你将1和2的密钥组合在一起制作密钥3.他们只是在寻找最终的有效密钥。

有趣的是,旧的DES算法具有类似的属性。如果使用56位DES密钥K1对某些内容进行加密,然后使用另一个56 DES K2密钥再次对其进行加密,则实际上并未将其设置为安全两倍,因为存在56位密钥(既不是K1也不是K2)将加密文本直接转换为纯文本,这是受攻击的所有需要​​查找的内容。这就是3DES实现实际使用加密和解密组合的原因。加密块是

ciphertext = Encrypt(K3, Decrypt(K2, Encrypt(K1, plaintext)))

修改

正如亨利所指出的那样,我关于DES中双重加密的陈述是在错误的假设下进行的