⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deskey.java

📁 S-加密算法输入为一个8位的明文组和一个10位的密钥
💻 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 + -