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

📄 des.java

📁 JAVA版的DES加密算法
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	temp[ 9] = (byte)binary[1+valindex]; 	temp[10] = (byte)binary[2+valindex]; 	temp[11] = (byte)binary[3+valindex]; 	valindex = s4[2*ER[18]+ER[23]][2*(2*(2*ER[19]+ER[20])+ER[21])+ER[22]]; 	valindex = valindex * 4; 	temp[12] = (byte)binary[0+valindex]; 	temp[13] = (byte)binary[1+valindex]; 	temp[14] = (byte)binary[2+valindex]; 	temp[15] = (byte)binary[3+valindex]; 	valindex = s5[2*ER[24]+ER[29]][2*(2*(2*ER[25]+ER[26])+ER[27])+ER[28]]; 	valindex = valindex * 4; 	temp[16] = (byte)binary[0+valindex]; 	temp[17] = (byte)binary[1+valindex]; 	temp[18] = (byte)binary[2+valindex]; 	temp[19] = (byte)binary[3+valindex]; 	valindex = s6[2*ER[30]+ER[35]][2*(2*(2*ER[31]+ER[32])+ ER[33])+ER[34]]; 	valindex = valindex * 4; 	temp[20] = (byte)binary[0+valindex]; 	temp[21] = (byte)binary[1+valindex]; 	temp[22] = (byte)binary[2+valindex]; 	temp[23] = (byte)binary[3+valindex]; 	valindex = s7[2*ER[36]+ER[41]][2*(2*(2*ER[37]+ER[38])+ ER[39])+ER[40]]; 	valindex = valindex * 4; 	temp[24] = (byte)binary[0+valindex]; 	temp[25] = (byte)binary[1+valindex]; 	temp[26] = (byte)binary[2+valindex]; 	temp[27] = (byte)binary[3+valindex]; 	valindex = s8[2*ER[42]+ER[47]][2*(2*(2*ER[43]+ER[44])+ ER[45])+ER[46]]; 	valindex = valindex * 4; 	temp[28] = (byte)binary[0+valindex]; 	temp[29] = (byte)binary[1+valindex]; 	temp[30] = (byte)binary[2+valindex]; 	temp[31] = (byte)binary[3+valindex];   }    /** * P置换,将S盒处理;处理后的32位字节数按照P置换的规则置换 */protected void p(){  	/* Permute - P */ 	Rn[ 0] = temp[15]; 	Rn[ 1] = temp[ 6]; 	Rn[ 2] = temp[19]; 	Rn[ 3] = temp[20]; 	Rn[ 4] = temp[28]; 	Rn[ 5] = temp[11]; 	Rn[ 6] = temp[27]; 	Rn[ 7] = temp[16]; 	Rn[ 8] = temp[ 0]; 	Rn[ 9] = temp[14]; 	Rn[10] = temp[22]; 	Rn[11] = temp[25]; 	Rn[12] = temp[ 4]; 	Rn[13] = temp[17]; 	Rn[14] = temp[30]; 	Rn[15] = temp[ 9]; 	Rn[16] = temp[ 1]; 	Rn[17] = temp[ 7]; 	Rn[18] = temp[23]; 	Rn[19] = temp[13]; 	Rn[20] = temp[31]; 	Rn[21] = temp[26]; 	Rn[22] = temp[ 2]; 	Rn[23] = temp[ 8]; 	Rn[24] = temp[18]; 	Rn[25] = temp[12]; 	Rn[26] = temp[29]; 	Rn[27] = temp[ 5]; 	Rn[28] = temp[21]; 	Rn[29] = temp[10]; 	Rn[30] = temp[ 3]; 	Rn[31] = temp[24];  }  protected void IIP(){	/* Inverse Initial Permutation */ 	output[ 0] = bufout[39]; 	output[ 1] = bufout[ 7]; 	output[ 2] = bufout[47]; 	output[ 3] = bufout[15]; 	output[ 4] = bufout[55]; 	output[ 5] = bufout[23]; 	output[ 6] = bufout[63]; 	output[ 7] = bufout[31]; 	output[ 8] = bufout[38]; 	output[ 9] = bufout[ 6]; 	output[10] = bufout[46]; 	output[11] = bufout[14]; 	output[12] = bufout[54]; 	output[13] = bufout[22]; 	output[14] = bufout[62]; 	output[15] = bufout[30]; 	output[16] = bufout[37]; 	output[17] = bufout[ 5]; 	output[18] = bufout[45]; 	output[19] = bufout[13]; 	output[20] = bufout[53]; 	output[21] = bufout[21]; 	output[22] = bufout[61]; 	output[23] = bufout[29]; 	output[24] = bufout[36]; 	output[25] = bufout[ 4]; 	output[26] = bufout[44]; 	output[27] = bufout[12]; 	output[28] = bufout[52]; 	output[29] = bufout[20]; 	output[30] = bufout[60]; 	output[31] = bufout[28]; 	output[32] = bufout[35]; 	output[33] = bufout[ 3]; 	output[34] = bufout[43]; 	output[35] = bufout[11]; 	output[36] = bufout[51]; 	output[37] = bufout[19]; 	output[38] = bufout[59]; 	output[39] = bufout[27]; 	output[40] = bufout[34]; 	output[41] = bufout[ 2]; 	output[42] = bufout[42]; 	output[43] = bufout[10]; 	output[44] = bufout[50]; 	output[45] = bufout[18]; 	output[46] = bufout[58]; 	output[47] = bufout[26]; 	output[48] = bufout[33]; 	output[49] = bufout[ 1]; 	output[50] = bufout[41]; 	output[51] = bufout[ 9]; 	output[52] = bufout[49]; 	output[53] = bufout[17]; 	output[54] = bufout[57]; 	output[55] = bufout[25]; 	output[56] = bufout[32]; 	output[57] = bufout[ 0]; 	output[58] = bufout[40]; 	output[59] = bufout[ 8]; 	output[60] = bufout[48]; 	output[61] = bufout[16]; 	output[62] = bufout[56]; 	output[63] = bufout[24];  }    public Des(String key){  	this.key=key;  	subKey=new SubKey(key);  }    /**   * 加密数据操作 * @param dataSrc * @param readLen * @return 加密后的数据 */public String enc(String dataSrc,int readLen) {  	this.dataSrc=dataSrc;  	this.readLen=readLen;  	convert4CharTo64bit(dataSrc);//将4个字符串转换为64为byte的字节   	IP();  	//IP置换后分为左右各32位的两组数据  	for (int i = 0; i<32; i++) {  			Ln[i]=bufout[i];     // L0  			Rn[i]=bufout[32+i];  //R0	}    	/*  	 * 16次迭代加密  	 */  	for (int iter = 1; iter<17; iter++) {  		for (int i = 0; i<32; i++) {  			LR[i]=Ln[i];       			Ln[i]=Rn[i];	    }  			expand32To48bit(Rn);  //从32位扩展置换成为48位		/*		 * 选择当前需要使用的密钥		 */	  	switch(iter)		{			case 1:				ki=subKey.k1; break;			case 2:				ki=subKey.k2; break;			case 3:				ki=subKey.k3; break;			case 4:				ki=subKey.k4; break;			case 5:				ki=subKey.k5; break;			case 6:				ki=subKey.k6; break;			case 7:				ki=subKey.k7; break;			case 8:				ki=subKey.k8; break;			case 9:				ki=subKey.k9; break;			case 10:				ki=subKey.k10; break;			case 11:				ki=subKey.k11; break;			case 12:				ki=subKey.k12; break;			case 13:				ki=subKey.k13; break;			case 14:				ki=subKey.k14; break;			case 15:				ki=subKey.k15; break;			case 16:				ki=subKey.k16; break;							}				XOR(ER,ki);//异或处理后要以后用的数据为ER  		sBox(); //S盒处理  		p();//P处理  		XOR(Rn,LR);//将P置换后的数据Rn与LR进行异或,最后得到的数据在Rn里面,作为下一次迭代的数据	}	/*	 * 将16次迭代后的数据组合在一起	 */	for (int i = 0; i<32; i++) {		bufout[i]=Rn[i];		bufout[32+i]=Ln[i];    }    IIP();//将16次迭代后组合在一起的数据进行IP逆置换    convert64bitTo4Char();//将64位字节转换成4个字符    return dataDest;   }    /**   * 解密加密数据操作   * @param dataSrc   * @param readLen   * @return 解密后的数据  */ public String dec(String dataSrc,int readLen){  	this.dataSrc=dataSrc;  	this.readLen=readLen;  	convert4CharTo64bit(dataSrc);  	IP();//进行IP置换  	for (int i = 0; i<32; i++) {  			Ln[i]=bufout[i];     // L0  			Rn[i]=bufout[32+i];  //R0	}  	  	for (int iter = 1; iter<17; iter++) {  		for (int i = 0; i<32; i++) {  			LR[i]=Ln[i];       			Ln[i]=Rn[i];	    }  			expand32To48bit(Rn);  //Rn-1 expand to 48 bit save to ER[]		switch(iter)		{			case 1:				ki=subKey.k16; break;			case 2:				ki=subKey.k15; break;			case 3:				ki=subKey.k14; break;			case 4:				ki=subKey.k13; break;			case 5:				ki=subKey.k12; break;			case 6:				ki=subKey.k11; break;			case 7:				ki=subKey.k10; break;			case 8:				ki=subKey.k9; break;			case 9:				ki=subKey.k8; break;			case 10:				ki=subKey.k7; break;			case 11:				ki=subKey.k6; break;			case 12:				ki=subKey.k5; break;			case 13:				ki=subKey.k4; break;			case 14:				ki=subKey.k3; break;			case 15:				ki=subKey.k2; break;			case 16:				ki=subKey.k1; break;							}		XOR(ER,ki);  		sBox();  		p();  		XOR(Rn,LR);  			}		for (int i = 0; i<32; i++) {		bufout[i]=Rn[i];		bufout[32+i]=Ln[i];    }    IIP();    convert64bitTo4Char();    return dataDest;  }} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -