加解密 Java 凯撒密码

Posted

技术标签:

【中文标题】加解密 Java 凯撒密码【英文标题】:Encryption and Decryption Java Caesar Cipher 【发布时间】:2016-08-30 05:29:37 【问题描述】:

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

每个字母都有一个数字,对应字母在字母表中的位置 每个数字都带有号码名称的第一个字母

加密完成并开始工作后,我想尝试解密文本。

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();
      
   

谢谢

【问题讨论】:

您可能需要重新表述您的问题。我读了它,无法理解你在问什么。据我所知,您正在阅读提示,并在某处写信PrintWriter。有什么问题? 嗨,更新后的问题更好吗?谢谢:) 【参考方案1】:

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

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

    通过执行以下操作检查 ch1 是否为数字:if (ch1 &gt;= 0x30 &amp;&amp; ch1 &lt;= 0x39)

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

    同样的信件:if (ch1 &gt;= 0x61 &amp;&amp; ch1 &lt;= 0x7A)

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

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

有许多不同的方法可以实现您想要做的事情。这是其中之一。它不一定是最好的。

【讨论】:

以上是关于加解密 Java 凯撒密码的主要内容,如果未能解决你的问题,请参考以下文章

python-凯撒密码加解密

凯撒密码加密解密--JAVA实现(基础)

凯撒密码解密器

凯撒密码的蛮力解密

凯撒密码不解密

密码学小传——凯撒密码的解密起源