?? codingmachine.java
字號(hào):
package com.mars.func;
/**
* @author 劉權(quán)
* @version 1.0
*/
import java.util.TreeMap;
public class CodingMachine {
Generator gen;
int[] datafgprt;//密文的指紋
String srcString="";
public CodingMachine(){
gen=new Generator();
}
// 對(duì)明文進(jìn)行加密
public String encrypt(String srcmsg){
byte[] srcbytes=srcmsg.getBytes();
byte[] keys=gen.getKeys();
byte[] desbytes=new byte[srcbytes.length];
datafgprt=new int[srcbytes.length];
byte key;
String desmsg="";
int[] keysID=gen.getKeysID();
int id;
int index;
TreeMap<Integer, Character> codeMap=gen.getCodeMap();
//將明文與key異或
for(int i=0;i<srcbytes.length;i++){
index=i%100;
id=keysID[index];
key=keys[id];
desbytes[i]=(new Integer(srcbytes[i]^key)).byteValue();
}
//將異或后的碼通過(guò)字符表轉(zhuǎn)化成字母和數(shù)字
for(int i=0;i<desbytes.length;i++){
int mapKey=desbytes[i];
if(codeMap.containsKey(mapKey)){
desmsg=desmsg+codeMap.get(mapKey);
datafgprt[i]=0;
}
else{
desmsg=desmsg+mapKey;
if(mapKey<10){
datafgprt[i]=1;
}
else{
if(mapKey>=10&&mapKey<100){
datafgprt[i]=2;
}
else{
datafgprt[i]=3;
}
}
}
}
/*System.out.println("數(shù)據(jù)指紋:"+datafgprt.length);
for(int i=0;i<datafgprt.length;i++){
System.out.print(datafgprt[i]+" ");
}
System.out.println();*/
return desmsg;
}
// 對(duì)密文進(jìn)行解密
public String dencrypt(String desmsg){
TreeMap<Character,Integer> reverseCodeMap=gen.getReverseCodeMap();
byte[] keys=gen.getKeys();
int[] keysID=gen.getKeysID();
int flag;
int pos=0;
byte[] srcbytes=new byte[datafgprt.length];
String srcmes;
for(int i=0;i<datafgprt.length;i++){
if(datafgprt[i]==0){//從字符逆對(duì)應(yīng)表中找原碼
char keyChar=desmsg.charAt(pos);
srcbytes[i]=reverseCodeMap.get(keyChar).byteValue();
pos=pos+1;
}
else{
if(datafgprt[i]==1){//一位數(shù)字,原樣轉(zhuǎn)化
String substr=desmsg.substring(pos, pos+1);
flag=Integer.parseInt(substr);
srcbytes[i]=(new Integer(flag)).byteValue();
pos=pos+1;
}
else{
if(datafgprt[i]==2){//兩位數(shù)字,原樣轉(zhuǎn)化
String substr=desmsg.substring(pos, pos+2);
flag=Integer.parseInt(substr);
srcbytes[i]=(new Integer(flag)).byteValue();
pos=pos+2;
}
else{//三位數(shù)字,原樣轉(zhuǎn)化
String substr=desmsg.substring(pos, pos+3);
flag=Integer.parseInt(substr);
srcbytes[i]=(new Integer(flag)).byteValue();
pos=pos+3;
}
}
}
}
for(int i=0;i<srcbytes.length;i++){
int index=i%100;
int temp=srcbytes[i]^keys[keysID[index]];
srcbytes[i]=(new Integer(temp)).byteValue();
}
srcmes=new String(srcbytes);
return srcmes;
}
/*public static void main(String[] args) {
CodingMachine cm=new CodingMachine();
String srcmsg="askdfakdjoapwJhJKkhLkjKlkLKlktcjhlaspeihHjFfyGiPOjiHGgFgfFHlskFl;kJDlksdjLKJlkdjoiajHkhhlHkHJhgJGkhJHkHkjhJHkHhJhkJGugUjHkooiLKJHgJgJG";
System.out.println("明文長(zhǎng)度:"+srcmsg.length());
System.out.println("明文:"+srcmsg);
cm.gen.showMsg();
String desmsg=cm.encrypt(srcmsg);
System.out.println("密文:"+desmsg);
srcmsg=cm.dencrypt(desmsg);
System.out.println("解密后的明文:"+srcmsg);
System.out.println("解密后的明文長(zhǎng)度:"+srcmsg.length());
}*/
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -