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

📄 destest.java

📁 DES算法的JAVA实现源代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    System.out.println("Doing ecb");    for (i=0; i < DesTest.NUM_TESTS; i++) {      System.out.println("Doing ecb " + i);      DesKey ks = new DesKey( key_data[i], false);      Des des = new Des(ks);      memcpy(in, plain_data[i], 8);      memset(out,(byte)0,8);      memset(outin,(byte)0,8);      des.ecb_encrypt(in, 0, out, 0, Des.ENCRYPT);      des.ecb_encrypt(out,0, outin, 0, Des.DECRYPT);      if (memcmp(out,cipher_data[i],8) != false) {	System.out.println("Encryption error " + Integer.toString(i+1));	System.out.println("Key data :");	printhex(key_data[i]);	System.out.println("in :");	printhex(in);	System.out.println("cipher_data :");	printhex(cipher_data[i]);	System.out.println("out :");	printhex(out);	err=1;      }      if (memcmp(in,outin,8) != false) {	System.out.println("Decryption error " + Integer.toString(i+1));	System.out.println("Key data :");	printhex(key_data[i]);	System.out.println("out :");	printhex(out);	System.out.println("in :");	printhex(in);	System.out.println("outin :");	printhex(outin);	err=1;      }    }    System.out.println("Doing (tripledes) ede ecb");    for (i=0; i<(NUM_TESTS-1); i++) {      System.out.println("Doing (tripledes) ede ecb " + i);      DesKey ks = new DesKey(key_data[i], false);      DesKey ks2 = new DesKey(key_data[i+1], false);      memcpy(in,plain_data[i],8);      memset(out,(byte)0,8);      memset(outin,(byte)0,8);      TripleDes tdes = new TripleDes(ks, ks2);      tdes.ecb_encrypt(in, 0, out, 0, TripleDes.ENCRYPT);      tdes.ecb_encrypt(out, 0, outin, 0, TripleDes.DECRYPT);      if (memcmp(out,cipher_ecb2[i],8) != false) {	System.out.println("Encryption error " + Integer.toString(i+1));	printhex(key_data[i]);	printhex(in);	printhex(cipher_ecb2[i]);	printhex(out);	err=1;      }      if (memcmp(in,outin,8) != false) {	System.out.println("Decryption error " + Integer.toString(i+1));	printhex(key_data[i]);	printhex(out);	printhex(in);	printhex(outin);	err=1;      }    }    {      System.out.println("Doing cbc");      DesKey ks = new DesKey(cbc_key, false);      Des des = new Des(ks);            byte [] cbc_in;      byte [] cbc_out;      byte [] cbc_modivec = new byte [ cbc_iv.length ];      cbc_in = new byte [ ((cbc_string.length()+1)+7)&~7 ];      cbc_out = new byte [ ((cbc_string.length()+1)+7)&~7 ];      memset(cbc_out,(byte)0,cbc_out.length);      memset(cbc_in,(byte)0,cbc_in.length);      memcpy(cbc_in, cbc_data, cbc_in.length);      memcpy(cbc_modivec, cbc_iv, cbc_modivec.length);      des.cbc_encrypt(cbc_in, 0, cbc_in.length, 		      cbc_out, 0, cbc_modivec, Des.ENCRYPT);      if (memcmp(cbc_out,cbc_ok,32) != false)	System.out.println("cbc_encrypt encrypt error");      memcpy(cbc_modivec, cbc_iv, cbc_modivec.length);      des.cbc_encrypt(cbc_out, 0, cbc_out.length, 		      cbc_in, 0, cbc_modivec, Des.DECRYPT);      if (memcmp(cbc_in,cbc_data,32) != false) {	System.out.println("cbc_encrypt decrypt error");      }    }    {      System.out.println("Doing (TripleDes) ede cbc");      DesKey ks = new DesKey(cbc_key,false);      DesKey ks2 = new DesKey(cbc2_key, false);      DesKey ks3 = new DesKey(cbc3_key, false);            TripleDes des3 = new TripleDes(ks, ks2, ks3);      i = cbc_string.length() + 1;      i=((i+7)/8)*8;      byte [] iv3 = new byte [ 8 ];      byte [] cbc_out = new byte [ i ];      byte [] cbc_in = new byte [ i ];      memset(cbc_out, (byte)0, cbc_out.length);      memset(cbc_in, (byte)0, cbc_in.length);      memcpy(iv3, cbc_iv, cbc_iv.length);      memcpy(cbc_in, cbc_data, 16);      des3.cbc_encrypt(cbc_in, 0, 16, cbc_out, 0, iv3, Des.ENCRYPT);      System.arraycopy(cbc_data, 16, cbc_in, 16, i - 16);      des3.cbc_encrypt(cbc_in, 16, i - 16, cbc_out, 16, iv3, Des.ENCRYPT);      if (memcmp(cbc_out,cbc3_ok, i) != false)	System.out.println("des_ede3_cbc_encrypt encrypt error");      memcpy(iv3, cbc_iv, cbc_iv.length);      des3.cbc_encrypt(cbc_out, 0, i, cbc_in, 0, iv3, Des.DECRYPT);      if (memcmp(cbc_in, cbc_data, cbc_string.length()+1) != false)	System.out.println("des_ede3_cbc_encrypt decrypt error");    }    {	System.out.println("Doing pcbc");	DesKey ks = new DesKey(cbc_key, false);	Des des = new Des(ks);	byte [] cbc_smalldata = new byte [ ((cbc_string.length()+1)+7)&~7 ];	byte [] cbc_out = new byte [ ((cbc_string.length()+1)+7)&~7 ];	byte [] cbc_in = new byte [ ((cbc_string.length()+1)+7)&~7 ];	memset(cbc_smalldata,(byte)0,cbc_smalldata.length);	memset(cbc_out,(byte)0,cbc_out.length);	memset(cbc_in,(byte)0,cbc_in.length);	memcpy(cbc_smalldata, cbc_data, cbc_string.length()+1);	/* CHECK if cbc_iv should be modified here..... */	des.pcbc_encrypt(cbc_smalldata, 0, cbc_smalldata.length, 			 cbc_out, 0, cbc_iv, Des.ENCRYPT);	if (memcmp(cbc_out,pcbc_ok,32) != false)	  System.out.println("pcbc_encrypt encrypt error");	des.pcbc_encrypt(cbc_out, 0, cbc_out.length, 			 cbc_in, 0, cbc_iv, Des.DECRYPT);	if (memcmp(cbc_in,cbc_data,32) != false)	  System.out.println("pcbc_encrypt decrypt error");    }    System.out.print("Doing ");    System.out.println("cfb8 ");    if(cfb_test(8,cfb_cipher8) != false)      return;    System.out.println("cfb16 ");    if(cfb_test(16,cfb_cipher16) != false)      return;    System.out.println("cfb32 ");    if(cfb_test(32,cfb_cipher32) != false)      return;    System.out.println("cfb48 ");    if(cfb_test(48,cfb_cipher48) != false)      return;    System.out.println("cfb64 ");    if(cfb_test(64,cfb_cipher64) != false)      return;    System.out.println("cb64() ");    if(cfb64_test(cfb_cipher64) != false)      return;    System.out.println("Doing small encrypt/decrypts");    Des des = new Des(new DesKey(cbc_key, false));    memcpy(cfb_tmp, cfb_iv, cfb_iv.length);    for (i = 0; i < plain.length; i++) {      des.cfb_encrypt(plain, i, 1,		      cfb_buf1, i,		      8,		      cfb_tmp,Des.ENCRYPT);    }    if (memcmp(cfb_cipher8,cfb_buf1, plain.length) != false) {      System.out.println("cfb_encrypt small encrypt error");      return;    }    memcpy(cfb_tmp,cfb_iv, cfb_iv.length);    for (i=0; i < plain.length; i++) {      des.cfb_encrypt(cfb_buf1, i, 1,		      cfb_buf2, i,		      8,		      cfb_tmp,Des.DECRYPT);    }    if (memcmp(plain,cfb_buf2,plain.length) != false) {      System.out.println("cfb_encrypt small decrypt error");      return;    }    System.out.println("Small encrypt/decrypts ok !");    System.out.println("(TripleDes) ede_cfb64() ");    if(ede_cfb64_test(cfb_cipher64) != false)      return;    System.out.println("(TripleDes) ede_cfb64() ok !");    System.out.println("Doing ofb");    des = new Des(new DesKey(ofb_key, false));    memcpy(ofb_tmp, ofb_iv, ofb_iv.length);    des.ofb_encrypt(plain, 0, plain.length/8,		    ofb_buf1, 0,		    64, ofb_tmp);    if (memcmp(ofb_cipher,ofb_buf1,ofb_buf1.length) != false) {      System.out.println("ofb_encrypt encrypt error");      return;    }    memcpy(ofb_tmp, ofb_iv, ofb_iv.length);    des.ofb_encrypt(ofb_buf1, 0, ofb_buf1.length /8,		    ofb_buf2, 0, 64,		    ofb_tmp);    if (memcmp(plain,ofb_buf2,ofb_buf2.length) != false) {      System.out.println("ofb_encrypt decrypt error");      return;    }    System.out.println("Doing ofb64");    des = new Des(new DesKey(ofb_key,false));    memcpy(ofb_tmp,ofb_iv,ofb_iv.length);    memset(ofb_buf1,(byte)0,ofb_buf1.length);    memset(ofb_buf2,(byte)0,ofb_buf1.length);    int [] ref_to_num= new int [1];    ref_to_num[0] = 0;    for (i=0; i< plain.length; i++) {      des.ofb64_encrypt(plain, i, 1,			ofb_buf1, i,			ofb_tmp, ref_to_num);    }    if (memcmp(ofb_cipher,ofb_buf1,ofb_buf1.length) != false) {      System.out.println("ofb64_encrypt encrypt error");      return;    }    memcpy(ofb_tmp,ofb_iv,ofb_iv.length);    ref_to_num[0] = 0;    des.ofb64_encrypt(ofb_buf1, 0, ofb_buf1.length,		      ofb_buf2, 0,		      ofb_tmp,ref_to_num);    if (memcmp(plain,ofb_buf2,ofb_buf2.length) != false) {      System.out.println("ofb64_encrypt decrypt error");      return;    }    {      System.out.println("Doing ede_ofb64");      DesKey ks = new DesKey(ofb_key,false);      TripleDes des3 = new TripleDes(ks, ks, ks);      memcpy(ofb_tmp, ofb_iv, ofb_iv.length);      memset(ofb_buf1,(byte)0,ofb_buf1.length);      memset(ofb_buf2,(byte)0,ofb_buf1.length);      ref_to_num[0] = 0;      for (i=0; i< plain.length; i++) {	des3.ofb64_encrypt(plain, i, 1,			   ofb_buf1, i,			   ofb_tmp,ref_to_num);      }      if (memcmp(ofb_cipher,ofb_buf1,ofb_buf1.length) != false ) {	System.out.println("ede_ofb64_encrypt encrypt error");	return;      }      memcpy(ofb_tmp,ofb_iv,ofb_iv.length);      ref_to_num[0] = 0;      des3.ofb64_encrypt(ofb_buf1, 0, ofb_buf1.length,			 ofb_buf2, 0,			 ofb_tmp,ref_to_num);      if (memcmp(plain,ofb_buf2,ofb_buf2.length) != false) {	System.out.println("ede_ofb64_encrypt decrypt error");	return;      }    }    {      System.out.println("Doing cbc_cksum");      byte [] cret = new byte [8];      des = new Des(new DesKey(cbc_key, false));      int cs = des.cbc_cksum(cbc_data, 0, cbc_string.length(),			     cret, 0,			     cbc_iv);      if (cs != cbc_cksum_ret) {	System.out.println("bad return value " + Integer.toString(cs) +			   " should be " + Integer.toString(cbc_cksum_ret));	return;      }      if (memcmp(cret,cbc_cksum_data,8) != false)	{	System.out.println("bad cbc_cksum block returned");      }    }    System.out.println("All tests passed !");  }}

⌨️ 快捷键说明

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