使用java创建caesar密码方法

时间:2013-11-26 01:24:54

标签: java methods encryption

我想创建一个方法,它将使用一个短语和一个取自args的数字。 数字形式args会将短语的字母从args中移动为数字的字母数量。

示例 javac Caesar.java java Caesar abcd 1

最终结果应该打印出来 BCDE

我的方法给了我一些问题..帮助?

private String encode(String num, int x)
{
    char[] charnum = args[1];
    for (x = 0; x <= charnum.length; x++)
    {
        charnum = charnum + x;
    }
    return new String(charnum);
}

我该怎么办?同样,我必须编写一个解码器方法。 除了之外,我将会有相同的设置 for循环更改的效果

charnum = charnum - x;

我的问题是,当我尝试编译时,我收到以下错误

symbol  : variable argslocation: class Lab041
    char[] charnum = args[1];
                     ^

Lab041.java:17: operator + cannot be applied to char[],int

        charnum = charnum + x;
                          ^

2 errors

我该如何解决?并且我对解码方法的假设是正确的吗?

4 个答案:

答案 0 :(得分:2)

Charnum是一个字符数组。你想做的事:

for (i = 0; i <= charnum.length; i++) {
    charnum[i] = (char) (charnum[i] + x);
}

这将引用该数组的元素。

另请注意,如果你翻过'z'

,你就没有安全防护装备

另请查看:Simple caesar cipher in java

答案 1 :(得分:2)

我会从一个更简单的编码方法开始,比如这个

private static String encode(String num, int x)
{
  StringBuilder sb = new StringBuilder();
  for (char c : num.toCharArray()) {
    sb.append((char) (c + x));
  }
  return sb.toString();
}

然后使用它,我会使用像这样的主要方法

public static void main(String[] args) 
{
  if (args == null || args.length < 2) {
    System.out.println("Not enough arguments.");
    System.exit(1);
  }
  int val = Integer.valueOf(args[args.length - 1]);
  for (int i = 0; i < args.length - 1; i++) {
    if (i != 0) {
      System.out.print(' ');
    }
    System.out.print(encode(args[i], val));
  }
  System.out.println();
}

答案 2 :(得分:1)

java cmd line args是一个字符串数组,你不能简单地将它分配给一个char数组,而String类有一个方法toCharArray()

还可以使用事实char数据类型可以通过加法运算符来操作,例如:

char c = 'a';
c = (char)(c + 1);  // c is now 'b'

答案 3 :(得分:1)

类CaesarCipher {

 private final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";

 public String encrypt(String plainText,int shiftKey)

 {

       plainText = plainText.toLowerCase();

       String cipherText="";

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

       {

            int charPosition = ALPHABET.indexOf(plainText.charAt(i));

            int keyVal = (shiftKey+charPosition)%26;

            char replaceVal = this.ALPHABET.charAt(keyVal);

            cipherText += replaceVal;

       }

       return cipherText;

 }

 public String decrypt(String cipherText, int shiftKey)

 {

       cipherText = cipherText.toLowerCase();

       String plainText="";

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

       {

            int charPosition = this.ALPHABET.indexOf(cipherText.charAt(i));

            int keyVal = (charPosition-shiftKey)%26;

            if(keyVal<0)

            {

                  keyVal = this.ALPHABET.length() + keyVal;

            }

            char replaceVal = this.ALPHABET.charAt(keyVal);

            plainText += replaceVal;

       }

       return plainText;

 }

}