凯撒密码加解密的方法

static int mod=26;
 private static void execmod(String abc, int n) {
  String eec = "";
  for (int i = 0; i < abc.length(); i++) {
   char c = abc.charAt(i);
   if (c >= 'a' && c <= '~') {
    c += n % mod;
    if (c > '~') {
     c -= mod;
    }
    if (c < 'a') {
     c += mod;
    }
    
   } else if (c >= '!' && c <= 'Z') {
    c += n % mod;
    if (c > 'Z') {
     c -= mod;
    }
    if (c < '!') {
     c += mod;
    }
   }else{
    c += n % mod;
    
   }
   eec += c;
  }
  System.out.println(eec);
 }

public static void main(String args[]) {
   for(int i=1;i<=500;i++)
   execmod("中文革0asdf&Y(w4e808wqesdf<>:L?DJK!",i);

}

 

程序既可用于加密又可用于解密。只要执行:

           java Caesar 明文(要加密的字符串) 密钥(移动的位数)

即可加密。

在密钥前面加上负号,将运行

           java Caesar 明文(要加密的字符串) -密钥(移动的位数)

即可解密。

    如为了加密字符串“Hello World!”,可随意取一个密钥如4,运行:

java Caesar "Hello World!" 4

将输出“Lipps Asvph!”。这里“Hello World!”是明文,“Lipps Asvph!”是密文。

    如果密钥大于26,程序中移位前会和26取模而将其调整到26以下。因此运行:

java Caesar "Hello World!" 30

同样将输出“Lipps Asvph!”。

    为了将密文“Lipps Asvph!”解密,需要知道加密该密文所用的密钥4,这样,执行:

java Caesar "Lipps Asvph!" -4

将得到明文“Hello World!”。

    如果密钥和加密时所用的不同,则解密时将得到无意义的输出,如运行

java Caesar "Lipps Asvph!" –3

程序将输出“Ifmmp Xpsme!”。这样,只有知道密钥才能得到原来的密文。

可能大家也注意到了,当n为1和n为27时的加密结果是一样的也就是只有26种变化,如果想要得到更多的变化,那把代码中的26加大就OK了,你加大到多小,那就有多小变化.

这种加密的好处是不会产生乱码!!(除非你加密源就已含乱码)

你可能感兴趣的:(凯撒密码加解密的方法)