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

📄 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 = 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 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.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 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.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 + -