📄 deskey.java
字号:
public class DesKey {
private static DesKey instance;
int[] inputKey=new int[10]; //input 10 bits
int[] P10=new int[10];
int[] firstHalfKey=new int[5]; //first half of the key
int[] secondHalfKey=new int[5];//second half of the key
int[] K1=new int[8];
int[] K2=new int[8];
int P10Order[]={3,5,2,7,4,10,1,9,8,6}; //reorder define
int P8Order[]={6,3,7,4,8,5,10,9};
public static void main(String[] args){
DesKey obj=DesKey.getInstance();
obj.readKeyFromConsole(null);
obj.makeKey();
}
public DesKey(){
}
public void generateKey(String sKey){
readKeyFromConsole(sKey);
makeKey();
}
/**
* return instance
* */
public static DesKey getInstance(){
if(instance==null){
instance = new DesKey();
}
return instance;
}
/**
* read key
* */
public void readKeyFromConsole(String sKey){
String readstr="1010000010";
if (sKey!=null)
readstr=sKey;
for(int iloop=0;iloop<10;iloop++){
inputKey[iloop]=Integer.parseInt(readstr.substring(iloop,iloop+1));
}
}
/**
*
* */
public void makeKey(){
reOrderCopy(inputKey,P10,P10Order);
/*
for(int iloop=0;iloop<P10Order.length ;iloop++){
P10[iloop]=inputKey[P10Order[iloop]-1];
}
*/
for(int iloop=0;iloop<5;iloop++){
firstHalfKey[iloop]=P10[iloop];
}
for(int iloop=0;iloop<5;iloop++){
secondHalfKey[iloop]=P10[iloop+5];
}
leftCircle(firstHalfKey);
leftCircle(secondHalfKey);
int[] tmpP10=new int[10];
System.arraycopy(firstHalfKey,0,tmpP10,0,5);
System.arraycopy(secondHalfKey,0,tmpP10,5,5);
//getP8(tmpP10,K1);
reOrderCopy(tmpP10,K1,P8Order);
leftCircle(firstHalfKey);
leftCircle(firstHalfKey);
leftCircle(secondHalfKey);
leftCircle(secondHalfKey);
System.arraycopy(firstHalfKey,0,tmpP10,0,5);
System.arraycopy(secondHalfKey,0,tmpP10,5,5);
//getP8(tmpP10,K2);
reOrderCopy(tmpP10,K2,P8Order);
}
public void leftCircle(int[] srcArray){
int ifirstValue=srcArray[0];
for(int iloop=0;iloop<srcArray.length -1;iloop++){
srcArray[iloop]=srcArray[iloop+1];
}
srcArray[srcArray.length-1]=ifirstValue;
}
public void getP8(int[] src,int[] dest){
reOrderCopy(src,dest,P8Order);
/*
for(int iloop=0;iloop<P8Order.length;iloop++){
dest[iloop]=src[P8Order[iloop]-1];
}
*/
watchArray(dest);//todo for debug
}
private void watchArray(int[] tmp){
for(int iloop=0;iloop<tmp.length;iloop++){
System.out.print(tmp[iloop]);
}
System.out.println();
}
/**
* reOrderCopy Array
* @param int[] src source array
* @param int[] dest destinate array
* @param int[] define array define for reorder
* */
public static int[] reOrderCopy(int[] src,int[] dest,int[] define){
for(int iloop=0;iloop<define.length;iloop++){
dest[iloop] = src[define[iloop]-1]; //because define index is start at 1 ,-1
}
return dest;
}
public static int[] reOrder(int[] data,int[] define) {
if (data.length != define.length){
System.out.println("error,array of data don't has the same length with define");
return null;
}
int[] dest=new int[data.length];
reOrderCopy(data,dest,define);
System.arraycopy(dest,0,data,0,data.length);
return data;
}
public int[] getK1(){
return K1;
}
public int[] getK2(){
return K2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -