加密加密的最佳方法是什么?

时间:2016-02-15 20:13:41

标签: java encryption vigenere

对于我的CPSC课程,我需要使用caesar cipher制作加密代码。这样就完成了。下一部分是获取加密消息并循环secretKey以添加到加密消息中。例如,如果我加密“你好!”使用13的移位,它将变成“Uryyb!”。然后我必须将“U”换成一个,“r”换成三个,“y”换一个等等......这将加入“Vuzbc!”我是初级班,所以我不知道所有很酷的提示和技巧。我知道的唯一可能的解决方案是采用凯撒密码的结果并以某种方式索引要添加到结果中的密钥。

这是我到目前为止的代码:

public class Cipher { 

private int secretKey;
private int superSecretKey;


public static void main(String [] args)
{ 
    Cipher cipher = new Cipher(1);
}

public Cipher(int myKey) { 
    secretKey = myKey;
}


public String caesarEncrpyt (String s) {
    String r = "";

    for(int i = 0; i < s.length(); i++) {

        char c = (char) (s.charAt(i));
        if(Character.isLetter(c)) {
            if (Character.isUpperCase(c)) {
                r += (char) ('A' + (c - 'A' + secretKey) % 26);
            }
            else {
                r += (char) ('a' + (c - 'a' + secretKey) % 26);
            }
        }
            else {
            r += c;
        }
    }
    return r;
}

public String caesarDecrypt (String s) {
    String r = "";

    for(int i = 0; i < s.length(); i++) {

        char c = (char) (s.charAt(i));
        if(Character.isLetter(c)) {
            if (Character.isUpperCase(c)) {
                r += (char) ('A' + (c - 'A' - secretKey) % 26);
            }
            else {
                r += (char) ('a' + (c - 'a' - secretKey) % 26);
            }
        }
            else {
            r += c;
        }
    }
    return r;
}

public String augustusEncrypt (String s) {
    String r = "";

    for(int i = 0; i < s.length(); i++) {

        char c = (char) (s.charAt(i));
        if(Character.isLetter(c)) {
            if (Character.isUpperCase(c)) {
                r += (char) ('A' + (c - 'A' + secretKey) % 26);
            }
            else {
                r += (char) ('a' + (c - 'a' + secretKey) % 26);
            }
        }
            else {
            r += c;
        }
    }
    return r;
}

augustusEncrypt是caesarEncrypt的复制和粘贴。我一直在转移一些希望找到解决方案的东西。提前谢谢!

编辑:我可能没有正确解释,如果你有问题,我会在这里。

2 个答案:

答案 0 :(得分:0)

编写一个函数,将其称为toDigits,它将采用int(或long)并返回与输入数字对应的int数组。至toDigits(13)=&gt; {1,3}和toDigits(4834)=&gt; {4,8,3,4}等

然后编写一个函数encryptChar,获取一个char和一个int,并通过该int加密char。 (encryptChar('e',1)=&gt;'f',encryptChar('a',28)=&gt; c等)

然后,您可以遍历消息的字符和此数组中的数字,将值传递给encryptChar并使用结果来汇编加密的消息。在一种松散的伪代码中:

fn encryptMessage(message, key):
  key_array = toDigits(key)
  output = ""
  for i in length (message):
    output.append(encryptChar(message[i], key_array[i % length(key_array)]))

答案 1 :(得分:0)

加密的最佳做法和惯例,解决方案很简单。

当我们离开字母表时,你有字母A-Z和a-z已经执行了正确的循环,你相信你已经正常工作了。您需要做的就是在循环之前添加1

这将是这样的(警告:未经测试):

('A' + ((c+1) - 'A' + secretKey) % 26)