📄 generator.java
字号:
package com.mars.func;
/**
* @author 刘权
* @version 1.0
*/
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
import java.util.TreeMap;
public class Generator {
private byte[] keys;
private int[] keysID;
private TreeMap<Integer, Character> codeMap;
private TreeMap<Character, Integer> reverseCodeMap;
public Generator(){
keys=genKeys();
keysID=genKeysID();
codeMap=genCodeMap();
reverseCodeMap=genReverseCodeMap(codeMap);
}
// 生成长度为100的密钥数组
/**
* 该密钥数组中的byte类型整数将用来对明文进行
* 异或加密
* */
private byte[] genKeys(){
byte[] keys=new byte[100];
Random rand=new Random();
for(int i=0;i<100;i++){
byte key=(new Integer(rand.nextInt(128))).byteValue();
keys[i]=key;
}
return keys;
}
// 生成对密钥数组中密钥进行选取的选取器
/**
* 用选取器中随机生成的序号去取密钥数组中的整数
* */
private int[] genKeysID(){
int[] keysID=new int[100];
Random rand=new Random();
for(int i=0;i<100;i++){
int id=rand.nextInt(100);
keysID[i]=id;
}
return keysID;
}
// 生成数字和字符A-Z、a-z、0-9之间的对应表
/**
* 对明文异或后的密文是0-127之间的数字
* 将选取这些数字的某些与字符A-Z、a-z、0-9形成一一对应
* 用于加密
* */
private TreeMap<Integer,Character> genCodeMap(){
TreeMap<Integer, Character> codeMap=new TreeMap<Integer,Character>();
Random rand=new Random();
char[] code={
'a','b','c','d','e','f','g','h',
'i','j','k','l','m','n','o','p',
'q','r','s','t','u','v','w','x',
'y','z','A','B','C','D','E','F',
'G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V',
'W','X','Y','Z','0','1','2','3',
'4','5','6','7','8','9'};
for(int i=0;i<code.length;i++){
int key=0;
//生成一个codeMap中没有的键值
do{
key=rand.nextInt(128);
}
while(codeMap.containsKey(key));
codeMap.put(key, code[i]);
}
return codeMap;
}
// 生成与字符对应表相反的逆对应表
/**
* 该表用于解密用
* */
private TreeMap<Character,Integer> genReverseCodeMap(TreeMap<Integer,Character> codeMap){
Integer index;
char value;
TreeMap<Character,Integer> reverseCodeMap=new TreeMap<Character,Integer>();
Set<Integer> keySet=codeMap.keySet();
Iterator<Integer> keyIterator=keySet.iterator();
while(keyIterator.hasNext()){
index=keyIterator.next();
value=codeMap.get(index);
reverseCodeMap.put(value, index);
}
return reverseCodeMap;
}
// 获取密钥数组
public byte[] getKeys(){
return keys;
}
// 获取密钥选择器
public int[] getKeysID(){
return keysID;
}
// 获取字符对应表
public TreeMap getCodeMap(){
return codeMap;
}
// 获取字符逆对应表
public TreeMap getReverseCodeMap(){
return reverseCodeMap;
}
public void showMsg(){
int index;
char value;
char value1;
int index1;
System.out.print("密钥:");
for(int i=0;i<keys.length;i++){
System.out.print(""+keys[i]+" ");
}
System.out.println();
System.out.print("密钥选择器:");
for(int i=0;i<keysID.length;i++){
System.out.print(""+keysID[i]+" ");
}
System.out.println();
System.out.println("字符对照表");
Set<Integer> keySet=codeMap.keySet();
Iterator<Integer> keyIterator=keySet.iterator();
while(keyIterator.hasNext()){
index=keyIterator.next();
value=codeMap.get(index);
System.out.println("KEY:"+index+" VALUE:"+value);
}
Set<Character> keySet1=reverseCodeMap.keySet();
Iterator<Character> keyIterator1=keySet1.iterator();
while(keyIterator1.hasNext()){
value1=keyIterator1.next();
index1=reverseCodeMap.get(value1);
System.out.println("KEY:"+value1+" VALUE:"+index1);
}
}
public static void main(String[] args){
Generator gen=new Generator();
gen.showMsg();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -