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了,你加大到多小,那就有多小变化.
这种加密的好处是不会产生乱码!!(除非你加密源就已含乱码)