?? 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 + -