📄 destest.java
字号:
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 + -