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

📄 javades.txt

📁 用java实现的加密算法
💻 TXT
📖 第 1 页 / 共 3 页
字号:
	bufout[26] = workData[47]; 
	bufout[27] = workData[39]; 
	bufout[28] = workData[31]; 
	bufout[29] = workData[23]; 
	bufout[30] = workData[15]; 
	bufout[31] = workData[ 7]; 
	bufout[32] = workData[56]; 
	bufout[33] = workData[48]; 
	bufout[34] = workData[40]; 
	bufout[35] = workData[32]; 
	bufout[36] = workData[24]; 
	bufout[37] = workData[16]; 
	bufout[38] = workData[ 8]; 
	bufout[39] = workData[ 0]; 
	bufout[40] = workData[58]; 
	bufout[41] = workData[50]; 
	bufout[42] = workData[42]; 
	bufout[43] = workData[34]; 
	bufout[44] = workData[26]; 
	bufout[45] = workData[18]; 
	bufout[46] = workData[10]; 
	bufout[47] = workData[ 2]; 
	bufout[48] = workData[60]; 
	bufout[49] = workData[52]; 
	bufout[50] = workData[44]; 
	bufout[51] = workData[36]; 
	bufout[52] = workData[28]; 
	bufout[53] = workData[20]; 
	bufout[54] = workData[12]; 
	bufout[55] = workData[ 4]; 
	bufout[56] = workData[62]; 
	bufout[57] = workData[54]; 
	bufout[58] = workData[46]; 
	bufout[59] = workData[38]; 
	bufout[60] = workData[30]; 
	bufout[61] = workData[22]; 
	bufout[62] = workData[14]; 
	bufout[63] = workData[ 6]; 
	
  }
  
  protected void XOR(byte[] op1,byte[] op2){
  	int len=op1.length;
  	for (int i = 0; i<len; i++) {
  		op1[i]=(byte)(op1[i] ^ op2[i]);
	}
  }
  
  protected void expand32To48bit(byte[] op){
  	/* Permute - E */ 
	ER[ 0] = op[31]; 
	ER[ 1] = op[ 0]; 
	ER[ 2] = op[ 1]; 
	ER[ 3] = op[ 2]; 
	ER[ 4] = op[ 3]; 
	ER[ 5] = op[ 4]; 
	ER[ 6] = op[ 3]; 
	ER[ 7] = op[ 4]; 
	ER[ 8] = op[ 5]; 
	ER[ 9] = op[ 6]; 
	ER[10] = op[ 7]; 
	ER[11] = op[ 8]; 
	ER[12] = op[ 7]; 
	ER[13] = op[ 8]; 
	ER[14] = op[ 9]; 
	ER[15] = op[10]; 
	ER[16] = op[11]; 
	ER[17] = op[12]; 
	ER[18] = op[11]; 
	ER[19] = op[12]; 
	ER[20] = op[13]; 
	ER[21] = op[14]; 
	ER[22] = op[15]; 
	ER[23] = op[16]; 
	ER[24] = op[15]; 
	ER[25] = op[16]; 
	ER[26] = op[17]; 
	ER[27] = op[18]; 
	ER[28] = op[19]; 
	ER[29] = op[20]; 
	ER[30] = op[19]; 
	ER[31] = op[20]; 
	ER[32] = op[21]; 
	ER[33] = op[22]; 
	ER[34] = op[23]; 
	ER[35] = op[24]; 
	ER[36] = op[23]; 
	ER[37] = op[24]; 
	ER[38] = op[25]; 
	ER[39] = op[26]; 
	ER[40] = op[27]; 
	ER[41] = op[28]; 
	ER[42] = op[27]; 
	ER[43] = op[28]; 
	ER[44] = op[29]; 
	ER[45] = op[30]; 
	ER[46] = op[31]; 
	ER[47] = op[ 0]; 
  }
  protected void sBox(){
  	/* 8 s-functions */
  	int valindex; 
	valindex = s1[2*ER[ 0]+ER[ 5]][2*(2*(2*ER[ 1]+ER[ 2])+ ER[ 3])+ER[ 4]]; 
	valindex = valindex * 4; 
	temp[ 0] = (byte)binary[0+valindex]; 
	temp[ 1] = (byte)binary[1+valindex]; 
	temp[ 2] = (byte)binary[2+valindex]; 
	temp[ 3] = (byte)binary[3+valindex]; 
	valindex = s2[2*ER[ 6]+ER[11]][2*(2*(2*ER[ 7]+ER[ 8])+ ER[ 9])+ER[10]]; 
	valindex = valindex = valindex * 4;  
	temp[ 4] = (byte)binary[0+valindex]; 
	temp[ 5] = (byte)binary[1+valindex]; 
	temp[ 6] = (byte)binary[2+valindex]; 
	temp[ 7] = (byte)binary[3+valindex]; 
	valindex = s3[2*ER[12]+ER[17]][2*(2*(2*ER[13]+ER[14])+ ER[15])+ER[16]]; 
	valindex = valindex = valindex * 4; 
	temp[ 8] = (byte)binary[0+valindex]; 
	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 = 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 = 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 = 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 = 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 = 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]; 
  }
  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);
  }
  
  //解密	
  public String enc(String dataSrc,int readLen) {
  	this.dataSrc=dataSrc;
  	this.readLen=readLen;
  	convert4CharTo64bit(dataSrc);
  	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.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);
  		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;
   }
  //加密
  public String dec(String dataSrc,int readLen){
  	this.dataSrc=dataSrc;
  	this.readLen=readLen;
  	convert4CharTo64bit(dataSrc);
  	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 + -