加密和解密Java Caesar Cipher

时间:2016-05-04 16:37:22

标签: java encryption netbeans

我创建了简单的加密程序来加密任何输入文件并将其保存在新的输出文件中。此时我得到简单的加密结果,但是我想使用以下模式作为文件中文本的加密。

每个字母的数字对应于字母表中字母的位置
 每个数字都带有数字名称的第一个字母

加密完成后,我想尝试解密文本。

import java.util.Scanner;
import java.io.PrintWriter;
import java.io.IOException;
public class CaesarCipher
{
   private int key;

   public CaesarCipher(int key)
   {
      this.key = key;
   }

   public char encrypt(char ch)
   {
      return (char)(ch + key);
   }

   public void encryptFile(Scanner in, PrintWriter out)
      throws IOException
   {

      while(in.hasNextLine())
      {
         String line = in.nextLine();
         for(int i = 0; i < line.length(); i++)
         {
            char ch1 = line.charAt(i);
            char ch2 = encrypt(ch1);
            System.out.print(ch1);
            out.print(ch2);
         }
         if(in.hasNextLine())`enter code here`
            out.println();
      }
   }
}

由于

1 个答案:

答案 0 :(得分:0)

从ascii代码表ascii-code,我们知道每个数字和每个字母的ascii代码。您可以使用它在encryptFile方法中执行以下操作:

  1. 创建一个开关或枚举,将每个数字映射到其名称的第一个字符。例如:0到'z',1到'o',2到't'等......

  2. 通过执行以下操作检查ch1是否为数字:if (ch1 >= 0x30 && ch1 <= 0x39)

  3. 如果为true,则ch1为数字。从映射中检索与数字对应的字母,并显示它。

  4. 同一封信:if (ch1 >= 0x61 && ch1 <= 0x7A)

  5. 如果ch1是一个字母,那么你可以使用Integer.parseInt(hex, 16)将ch1的十六进制值转换为整数(例如:'a'将为97)并从中减去一个常数96)。因此,对于'a',您将显示1(97-96 = 1),对于'd',您将显示4(100-96 = 4)。这样你就可以得到这封信的位置。

  6. 同样,您应该处理大写字母。

  7. 有许多不同的方法可以实现您的目标。这是其中之一。它不一定是最好的。