旋转在使用Java的Caeser密码中的作用

旋转在使用Java的Caeser密码中的作用,java,caesar-cipher,Java,Caesar Cipher,我了解凯撒密码,从这两个链接,我了解加密公式 Y = (X + K) mod 26 和解密 X= (Y - K) mod 26 但是,当我遵循Java Goorich、Tamassia和Goldwasser书籍中数据结构和算法中的代码时,代码如下 public class CaeserCipher { protected char[] encoder = new char[26] // Encryption array protected char[] decoder = new cha

我了解凯撒密码,从这两个链接,我了解加密公式

Y = (X + K) mod 26
和解密

X= (Y - K) mod 26
但是,当我遵循Java Goorich、Tamassia和Goldwasser书籍中数据结构和算法中的代码时,代码如下

public class CaeserCipher
{
protected char[] encoder = new char[26]   // Encryption array
protected char[] decoder = new char[26]   // Decryption array
public CaeserCipher (int rotation)
 {
  for (int k=0;k<26;k++)
  {
    encoder[k]= (char)('A' + (k + rotation) % 26);
    decoder[k]= (char)('A' + (k - rotation + 26) % 26);
  }
 }

public String encrypt(String message)
 {
   return transform(message,encoder);
 }
public String decrypt(String secret)
 {
   return transform(secret,decoder);
 }
private String transform(String original, char[] code)
 {
  char[] msg = original.toCharArray();
  for(int k = 0; k < msg.length; k++)
   if(Character.isUpperCase(msg[k]))
    {
     int j = msg[k] - 'A';
     msg[k] = code[j];
    }
  return new String(msg)
 }
public static void main (String[] args)
{
CaeserCipher cipher= new CaeserCipher(3);
System.out.println("Encryption code =" + new String(cipher.encoder));
System.out.println("Decryption code =" + new String(cipher.decoder));
String message = "THE EAGLE IS IN PLAY; MEET AT JOE'S.";
String coded = cipher.encrypt(message);
System.out.println("Secret: "+ coded);
String answer = cipher.decrypt(coded);
}}
公共类密码
{
受保护的字符[]编码器=新字符[26]//加密数组
受保护的字符[]解码器=新字符[26]//解密数组
公共CaeserCipher(整数轮换)
{

for(int k=0;k
rotation
是密钥(
k
在您的原始公式中)。什么不清楚?为什么我们使用这个“A”?为什么在解密公式中添加26?我们使用
'A'
,因为它是ASCII表中的第一个字符(也就是说,我们正在将数字0-26转换为可打印的字母).关于26,我需要读得更透彻一点。给我几分钟,我知道了,为了使数字为正,我们正在做+26,谢谢你是的,就是这样。