凯撒密码加解密的方法

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);
 }java

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

}spa

 

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

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

便可加密。字符串

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

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

便可解密。程序

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

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了,你加大到多小,那就有多小变化.

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

相关文章
相关标签/搜索