您的位置:首页 > 编程语言 > Java开发

JAVA之凯撒加密【解密】

2017-01-23 11:24 369 查看
1、凯撒加密(Caesar cipher)是一种简单的消息编码方式:它根据字母表将消息中的每个字母移动常量位k。举个例子如果k等于3,则在编码后的消息中,每个字母都会向前移动3位:a会被替换为d;b会被替换成e;依此类推。字母表末尾将回卷到字母表开头。于是,w会被替换为x,x会被替换为a。

 1>打开记事本,写如下一段代码:
import java.util.HashMap;
import java.util.Map;
public class Encryption {
private static Map<Character, Character> map = new HashMap<Character, Character>();
static {
map.put('a', 'd');
map.put('b', 'e');
map.put('c', 'f');
map.put('d', 'g');
map.put('e', 'h');
map.put('f', 'i');
map.put('g', 'j');
map.put('h', 'k');
map.put('i', 'l');
map.put('j', 'm');
map.put('k', 'n');
map.put('l', 'o');
map.put('m', 'p');
map.put('n', 'q');
map.put('o', 'r');
map.put('p', 's');
map.put('q', 't');
map.put('r', 'w');
map.put('s', 'v');
map.put('t', 'u');
map.put('w', 'x');
map.put('v', 'y');
map.put('u', 'z');
map.put('x', 'a');
map.put('y', 'b');
map.put('z', 'c');
}

/**
* 加密
*
*/
public String encrypt(String s) {
if (s == null || s.equals("")) {
return s;
}
char c;
String result = "";
for(int i = 0;i < s.length();i++){
c = s.charAt(i);
if(map.containsKey(c)){
result += map.get(c);
}else{
result += c;
}
}
return result;
}
}
保存为Encryption.java【同上节,我还是把他放在了D盘下InputTest文件夹内】 

2>打开记事本,写如下一段代码:
import java.util.HashMap;
import java.util.Map;
public class Decryption {
private static Map<Character, Character> map = new HashMap<Character, Character>();
static {
map.put('d', 'a');
map.put( 'e','b');
map.put('f', 'c');
map.put('g', 'd');
map.put('h', 'e');
map.put('i', 'f');
map.put('j', 'g');
map.put('k', 'h');
map.put('l', 'i');
map.put('m', 'j');
map.put('n', 'k');
map.put('o', 'l');
map.put('p', 'm');
map.put('q', 'n');
map.put('r', 'o');
map.put('s', 'p');
map.put('t', 'q');
map.put('w', 'r');
map.put('v', 's');
map.put('u', 't');
map.put('x', 'w');
map.put('y', 'v');
map.put('z', 'u');
map.put('a', 'x');
map.put('b', 'y');
map.put('c', 'z');
}

/**
* 解密
*/
public String decrypt(String s){
if(s == null || s.equals("")){
return s;
}
char c;
String result = "";
for(int i = 0;i < s.length();i++){
c = s.charAt(i);
if(map.containsKey(c)){
result += map.get(c);
}else{
result += c;
}
}
return result;
}
}保存为Decryption.java【同上节,我还是把他放在了D盘下InputTest文件夹内】  
3>打开记事本,写如下一段代码: 
import java.util.Scanner;
public class Switcher {
public static void main(String[] args){
System.out.println("******************欢 迎 使 用凯撒加密器******************");
Scanner input = new Scanner(System.in);
System.out.print("\n请选择操作(1.加密,2.解密): ");
int operator = input.nextInt();
if(operator == 1){
System.out.print("请输入待加密的字符串:");
String source = input.next();
Encryption encryption = new Encryption();
String encrytStr = encryption.encrypt(source);
System.out.println("加密后的字符串是:");
System.out.println(encrytStr);
}else if(operator == 2){
System.out.print("请输入待解密的字符串:");
String source = input.next();
Decryption decryption = new Decryption();
String decryptStr = decryption.decrypt(source);
System.out.println("解密后的字符串是:");
System.out.println(decryptStr);
}else{
System.out.println("操作失误");
}
}
}
保存为 Switcher.java【同上节,我还是把他放在了D盘下InputTest文件夹内】 

打开dos运行窗口,输入d:转到D盘,接下来输入cd InputTest转到InputTest目录下:

输入Javac Switcher.java 回车 java Switcher。
我们加密:admin和解密:admin;结果如下图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息