From 6d4238020f9581b5a9e03bd37101835d77693f59 Mon Sep 17 00:00:00 2001 From: Nirjas Jakilim Date: Fri, 27 Mar 2020 20:46:07 +0600 Subject: [PATCH] Initial commit --- build.xml | 73 + build/built-jar.properties | 4 + build/classes/encryptdecrypt/ArtCover.jpg | Bin 0 -> 12323 bytes build/classes/encryptdecrypt/DES.class | Bin 0 -> 11307 bytes build/classes/encryptdecrypt/DES.rs | 1 + .../encryptdecrypt/EncryptDecrypt$1.class | Bin 0 -> 823 bytes .../encryptdecrypt/EncryptDecrypt.class | Bin 0 -> 6828 bytes .../classes/encryptdecrypt/EncryptDecrypt.rs | 2 + .../classes/encryptdecrypt/Project_image.jpg | Bin 0 -> 12323 bytes build/classes/encryptdecrypt/RC4.class | Bin 0 -> 2149 bytes build/classes/encryptdecrypt/RC4.rs | 1 + build/classes/encryptdecrypt/TripleDES.class | Bin 0 -> 12037 bytes build/classes/encryptdecrypt/TripleDES.rs | 1 + build/classes/encryptdecrypt/UtilFile.class | Bin 0 -> 1755 bytes build/classes/encryptdecrypt/UtilFile.rs | 1 + dist/EncryptDecrypt.jar | Bin 0 -> 60987 bytes dist/How To Use.txt | Bin 0 -> 1546 bytes dist/README.TXT | 32 + manifest.mf | 3 + nbproject/build-impl.xml | 1420 +++++++++++++++++ nbproject/genfiles.properties | 8 + nbproject/private/private.properties | 2 + nbproject/private/private.xml | 13 + nbproject/project.properties | 74 + nbproject/project.xml | 15 + src/EncryptDecrypt/ArtCover.jpg | Bin 0 -> 12323 bytes src/EncryptDecrypt/DES.java | 358 +++++ src/EncryptDecrypt/EncryptDecrypt.java | 258 +++ src/EncryptDecrypt/Project_image.jpg | Bin 0 -> 12323 bytes src/EncryptDecrypt/RC4.java | 59 + src/EncryptDecrypt/TripleDES.java | 385 +++++ src/EncryptDecrypt/UtilFile.java | 53 + 32 files changed, 2763 insertions(+) create mode 100644 build.xml create mode 100644 build/built-jar.properties create mode 100644 build/classes/encryptdecrypt/ArtCover.jpg create mode 100644 build/classes/encryptdecrypt/DES.class create mode 100644 build/classes/encryptdecrypt/DES.rs create mode 100644 build/classes/encryptdecrypt/EncryptDecrypt$1.class create mode 100644 build/classes/encryptdecrypt/EncryptDecrypt.class create mode 100644 build/classes/encryptdecrypt/EncryptDecrypt.rs create mode 100644 build/classes/encryptdecrypt/Project_image.jpg create mode 100644 build/classes/encryptdecrypt/RC4.class create mode 100644 build/classes/encryptdecrypt/RC4.rs create mode 100644 build/classes/encryptdecrypt/TripleDES.class create mode 100644 build/classes/encryptdecrypt/TripleDES.rs create mode 100644 build/classes/encryptdecrypt/UtilFile.class create mode 100644 build/classes/encryptdecrypt/UtilFile.rs create mode 100644 dist/EncryptDecrypt.jar create mode 100644 dist/How To Use.txt create mode 100644 dist/README.TXT create mode 100644 manifest.mf create mode 100644 nbproject/build-impl.xml create mode 100644 nbproject/genfiles.properties create mode 100644 nbproject/private/private.properties create mode 100644 nbproject/private/private.xml create mode 100644 nbproject/project.properties create mode 100644 nbproject/project.xml create mode 100644 src/EncryptDecrypt/ArtCover.jpg create mode 100644 src/EncryptDecrypt/DES.java create mode 100644 src/EncryptDecrypt/EncryptDecrypt.java create mode 100644 src/EncryptDecrypt/Project_image.jpg create mode 100644 src/EncryptDecrypt/RC4.java create mode 100644 src/EncryptDecrypt/TripleDES.java create mode 100644 src/EncryptDecrypt/UtilFile.java diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..ce52359 --- /dev/null +++ b/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project EncryptDecrypt. + + + diff --git a/build/built-jar.properties b/build/built-jar.properties new file mode 100644 index 0000000..9684c27 --- /dev/null +++ b/build/built-jar.properties @@ -0,0 +1,4 @@ +#Wed, 18 Jul 2018 02:04:10 +0600 + + +D\:\\Java\ Codes\\EncryptDecrypt= diff --git a/build/classes/encryptdecrypt/ArtCover.jpg b/build/classes/encryptdecrypt/ArtCover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dcef43fe4a88f883d58f808fd664e60850c43e14 GIT binary patch literal 12323 zcmeHtcT`hd*XLC_N|7dlfKmiRKq(?pq9R?4fPmCIih_^_5Gg?jL`6lq6hYt-q=_^m zC3J{%0TJmEkU$WS5=cP8g@k0T@B6OroAv%RGvBP4HEW)eyR+`PIp<{m_Sxl}y)Ww< zYX%UsFflg)_U+pT`~iIc)+``v9OC5x09IDONdN%2q2Gi6Ht232^!Z0)O#(*1{(bv? zU;k=s9BjWECp$YE2Nx$7*KgwHIl#ls&CAWj#mmRbd*C3{xOn&l_zv>_zW+VR@8Q2k zLDxZUF7Dqw{^uI&BXEctK<>9^+b0X`KeUhS&^}fNAOrEr0U`Pg>R)Z&el~UvPKYJm z15gK?AjCc!+kS{y4t92^cR2Jrzm-W8WrR#oF_YU}D7+S)rhyShL1^bQS= zjE;?en;^`R=6=jCEdE?trfzKh+M;cPJG;Me?E~2U3F|+Q{Tr@B5U%~u8nAQy#^c>>S6>a0*?t=DO)GEUWQ|TjWwwZbd7PoTd#$^w#}BUNL#CSq18EX#YU=KL+ga z{}QtQ0QR4_2*5$MebC~u9Rgqg1H%HMDk4URzwQ%dSO8^qnFTPCOc@5Tw6`oEKMiC7 zPzM1A7VslxhZzIxvN5GQ>9&}`J~TA4J*t!iY#7T>XzGM4W`gq^3t%2KK(K&hmBn2p zwx0rE*kQ623ouos{+@?l8p{HDL@@2&@ZNsAx_*f)0KB(_VVYrce!dZS1Djn%;B@wm z)^-1;sXn4gM&)zWTZPKl4O`gwU;D^N|u&dq1v40lHEwCYEAJw zx1x@4IdkSfnn#LHeJp){cz5rOAK#n&mBi;xl&G1Cs^e;Nc0{jkF4RsC`*!Ph^6caO z;H9U~GWTBNZ#!aUG8#NPSwLh1wu_E&@sRp>z6E}Ky zZXVTm{TXF)2Emtop|B(+b_t5{GIuQTjMGB_#v(TIN_jEBKPm1STY9CO8=Pkp4PIjhRQk|JdS4wog8QKTFqglLW;W5Lvc}Um?xo*qd02etRF5q z?tatR)4KNDH;m-;p57|Sy}&11Ij)ufzntRp%babfuhdIDgW_>_1p)131o1Q3cy>cW zOlyloE!jGcp%XPTkl3V+%{q5%2-j?~ZAq1?7|E@&o?kw!!!LfSf77HdLv@Nw2u|!_ zkmauviT9Sv!Id2ia)@$Kz7Kl1>L8<8E6`=Q?byr&nBsJW4KuZNjplQ*%yyB&E%sd9gwYk6W6=1=&9a2E^sP)p_`!Jk6-tAG9?3WFYZ68sOg_%wg^ zeQZ|r>)+S1C_Q#wt21KkO z@{F;U(GJ41F}Xl2EeR~o4Uzds;M5Vd^4lD^^chPZ{6^Lwc+2cbo75xSHvPq2C82FGw!FJoX zc!N>KDL@`zh$J$(J?T2kFA(=|7VxYA8^tidP*yr4)R3;o4yHQQzA>x>78w{)-Z9>p z`@EB*vo+J%`9_}eyA{73Sl+&arz8C`371#wtLz5nI}vMkVu(pXX<`!x>;tLkMNSni4M{^|GqLkp`aagw-Q%y`{TNr z>YyXKaOe4y`k;!8;lNc#Of%C8cq#wc8=RS_Oc$}){YdwY<@KKZ_!>CiS12_1K|Sb$tRkq<4$J*p6v7Q`HDI8_r| zlZH$r_H#5$^&MkBWwx}Sq4gm;6btHh(_r8u`i+QoSXKDqDs?v8fuz_DJ2?5t0Zw_D z;w_}zM5~D{a_RH~JdzIySv2Nf5;W6%ICY0CqhRrsZd-|;a6-WKyjH>_OmtqJ4ARFS zT4Q65&o_w?%hOQ;;dJClC=4f5;wPGa0e8x3^blX1kH4BJlSdn_R zj_3>L=ORld$u)g`K6;X77H#E!TJ{C`KGHer@M8%Y84$ABj*)7SVrWw}y_^IRna7a! zgiD~~qUOr^V|B^$G0s2b*qwbh?;lSZyC+y>Qev02HO}PU*(<2VKf-Vr@-aWR2(o~S zxX3G3M%SJl;e8%B8UDi2S!AiA;8D(q<%lZ6%sYPwy-X7O*LUUNgaI-~;`rXbN z8qsgVlt*zDI=iwHsoM7#ALb@%WJ+LYRszj~Q@0ClWQD44nxqS{XU7HrJy8~`_ zJMBSzBGVa~?sOeYt7RT^N`GG<{N2kWm%O-ls(Z9N@Ym@tJCbgw zn&9LpWC0wr;5>3T@uV#PtoZdFO>h>0lJmC1%5b>1z04Uvq9kcn@N9VMXS|_5sLpT z(H|pYW=665i4g-(Nb)0}q1$+824hK5_c!!XE1t_)`4_)^jZ~eQJd+lj`QRlF^Or&B zcrvE7Ia?x%CQn)H#7+*-9@o`YVEh+)f>e*|1+=HXij`{SGaAF=#vk2X!So5LFTN zGg9s(R6AWVGN{PNA8QbEmm(>?-ccLj61J9nnsi7Sj7+=qc`83xhH~GtlaGrwyw}Kp zLOuEzXvCha3;Kn5&h8zy9}Yq#jC2MeMX*KfMY84P)z<0Hd-Q~^I|~NOW^QA^vvLk2 zcpvr2MB2MOY?A|0hxRtF@9j57XR!uk$ePQPL6f&3>WmT6lNVk8huKl8+eL^^E*S!z z;;)#9TaOv?vWE$w?cS^y9;+IX&-zj~h|_C)RT##l#@Sa_HXS~w=A^BbU^iqoYWpNB z_fqXdlvd;PxFuYzaeLLyBF2z_Gh9}wsj-^GF8oyk29Z4dAVnyhB) zFn8AzrM2j1b4kv~@0QlXXxN*HKE<>&T9Vi1#UO>x2}k9VKbw4Of5r9cod9^Qo5>?d zDP{89p_?((N1FtYSe^F7=f(Qt+2XF(WBY`?6!1BsxF3U`KUH?0f8u51E?FuhWp;73 zg?lf1i#XZGJ%SiP4Pco6zg{{ z=p2iiVGgqZ+!&;XT>Bv_`bgwxQl8Zdi^V@_5g2u^tfaf}bC%xmk#k$t@sXL1_e>B_ zHTq*ULALcq<I`XZ`W;ML?_QO@9worM4)ULf_GS&q{+n{?Du%iD%BU*p7jD+3`mg|Ou_huu zEh>9ig-BvvE!!L8cPZy$-5~;DuUvK};ucKa+zYwU?l69vC@eU}-z@i*BGX zHs!*-m9b{n=TFPg(0U!;QTZc++N=J`4gM)HCW5yL44`t^e_cgey$NX>zfyPlL{(mR z5#5jli1)Sm-h6f|<5OQpeV55ab|~YSL%9!Mb*CDU1XjuKLfUDrlvFo`uMt{^8$>i5 z!{ywEDF@%HgdEbU7rf*=P+@oK%ZFlxOkMsT)25q|RLzgc=rhzWMYHrQvd*=}p*wW# z&tpOvyn;feJJ)UKr}92qH<=G8!trR{~)j^f>-f-KJ!t7eZ)sKt&4*%?a-O~2;UK2#Lc z7Aq7b6W1N+321|Cl?*aFaiC}(%;ChemSm0?=FA|(3?%kZAVt3k1^ue{r_`L!I4@>sREA^v@6cd3*5h9Q@!eJf=QRWa4Cqe~HyP3MfV(o2iys64mVaMARpHvgS zq_~*L9xM~NP$8iGqUt1+zouM(Po6}8%C(H6ill)!84+03EY*1Y$rcYz*p<5CHT!=- zDR4Qzw)Jo8w6CB5{XAF-`SfRx!6mBfZZ8Yy8k4hW{y-r{YB_jlmYwJ|^DS%;EU4ru zOmer27XNtpp#$VYI3%FW(zy_LH-h3k0D9mjuJ+{O>W0bhwJnj&7RVJD-huh*^b?lP zHWhBT$M)Qk_rz$pK1}`;xts$k55!@7)}LW0*NE}SXgN@`fN`dZY9!hWwt5x5`q4Bf z_xRi#GDpx`xW}_7uTw(IOyXPDpfW+6Qymhb9+{zwq}wxxJ}gVC4K_JYB`oz|AC?F8 ztEAk9$%i>(gzC~17yDB{2w{Lx_WW1ozx2Xc2 zH|~hQr*-$&z^W8i-6<+eUd!2>iG&Se+qBwnV7U2e%W;MS7*A3)H6Q+??%Cnwg@LQJ zADXJ45s@ax9pBHVKKMKnWoJXf&%B0FtgsXAw2zQj2AQFvN{j^# z2*o;EB0~-x?1SyXUI!h@wtJ?0E7MTq%x2^|BHd6Q3LJ76FW3RJAGNu=1Iyt(ePB2c z5@bB8+fB*-17$+P!qVl$o4LOF%_AEXlRH&r&fZ-E8{&{C*c zFEH*u&n}ui-mxC{DNj`m3;pzYAAw$e?=-*r5B`@oLSrY+Zz0+_iLc3?eu}j(dpk{r zX<7|E3L8YX^71Qwu?UKlAE-F+@jHt4q6K{V&dZHwq%1JDzC{X@YH|!0B^MS}Tlq-m zN?NM)1fU*-iBuZ@pYRl80Zv8$)wCTO9XzcHzPwY|lH{izE8j4hSKk1~JveZ(nfMY96~iq*$n;s(4A8~KsKOjGkbG*7{|-KFY%plz53-qhzsHK zmzBF&1+bHaW%g@BX5HNBM{cR)6;9bc+d5JHBh^7CFZgRrux&N%iF0~C9Z!MFLy~=n zX+4SYzz9J~$)3IMc3=wyDxCVZ;{QHXyPb~F?(AV-%~GgZ}fLO zBA5fl_V*WH!H_hsLr64Wo_J7IV3kPS`Gt9sLn#V^?VmCdc+4;_0we84)LhI()+M}o zg8UWAHk4yD)h9@iD$0a+!MLz=hDa1iHbjoerwvH`V?u;`F};qgV<`hl!Z zHcCZ}KnhpVpK>STG&a+&@s`ECmHQqaVzf#)vo@cP4|kXnkMQb!d9~6Pj#R>`yAEXF zX9$VliK35qP$?&&MgAM(7R570yA#A9#flUd(kGCr3VAQcmR_o}@oMOS?_ZeSQ{oQ}UR~5>KlfOs!r0l> z?-sbpEBEp3+89{GX{uY{+<@qE=0e4Tv-zdS!}p19-#MXs6sR}=mAMNjn|OF{%X&-*s! zE{8sgeSf#sAF;Ii^lAH~>kXI7v!qPrYf%Z8gY4~XcwcZIi|PAUnfU{A{05 zH|{5gh#|3#^`mMwX9n3*8b2WZ@OM>jM@*K^dA8;NiM%1Oxx=06JfN%PhrwTdqQq}Y zGxetyKgHN3F36{BY{0dDOf1Bly{h7&Q=au*N+7aD2~3$CPxR5Zn}rg^E13c@TJ%Vi zSLxFD5P|4?B_P8l@TM$Yae*%zu8pNy&Y==uUU+FI=yd`?{UDOxk(K_V!OEo}IgWKB zp3ek3N{$qH`U|DI$IbYVC#4N@*~=14q#?dVYq=dMBEGJ zFrJ-x7D^;Mv+U&|Y+hmWV>KQ~dMo(UTCqolat$*{ z?9QQFhY|X&gYk37=eL?h3!GIIt>_mlRXIQDZuq#PPL{+rr6tv@1*87-)t)(0z$W77 z>+|QNn**~<>E~oZd_m4@{OrIqesYeMOTnz_umH|Qv?i!SLCj&=4Ui;-a$1_c1zL2j z*>KTzc;4&Ih_6TFYSqqXu`Tz+&lj!^Ctp~A&KqYVhGd{Tl$WZ<u@xN`69)Dkr8?n~$aeTs`{f8uRUnM7POS=~g=yb|? zqHl~W^Ew|-OE39$rB-abCZ*}H*hb`wCD|9fA2+yl%f3#KP42@*9Z(A^Q?9CCe_`Vh zHKv^d1h^%x5{#$Xl31IfU8bUnz`gXz4o(q+f}*1XUIb=>Z{nBu+*KUMZM@Y+m}tqSv;_!_gI z9I2r~NbKz4xH7cytU;I)rTckxt%jp_rqybVLt5NLo56lbmE2ajlcwzBw$v(GGgv{l zbaI?zn1ZjV!X)R;QIwVzUw%1!^ci~`NK`B zbZ^FO3cPIseISqF1ZL!evLVw)&<1x%u`A&xFJoHXPAD7_^__Vy5W2}3-jy8V>NkQk z_KhkEy@s7G45Y7*pM>-^w*7GPQZ;MK|Mw@M0^)h@kLjeC)w z%@L%DX|;zISDAG8$6i5;p}FM#vT`b${qaZ3+;rm*4w3A}SmTOf(z^IEQBdC$Rff#W z&M)`gjohhq7~fV82)GY+EhhDNoMTH4vjO3qgrbKGWB0P3p=r7KD-yT+0z5J9_h{Q^ zlZ$(Mjy^Y%+plrN?AVx{2rX2=q-?+ja^-(A?(F6L;{Jtyju2}(0j^udT-0y`qdE^0 z3LDOS5trX+c&u^HKikSbho7kc{-^LADFe>~yEP_$3qS4Ogg?e1GMC>l7&+>=8mibe zK){ot$R~YZv+ig!>U!cNT%J%Ht$z_!lJ)099=M_D zCJI(#faPc{REtCfRcgK^F}UiWMWvJcbtq9%s8fIgBk@zc&EK5P*rU>qQ`I_l`}q^1UuqAo{8^}ITR9Ro51WM5J>0pTxG}B#O}U7 z&@HIh&!**!=ygDUGF^P7Z=HF6J0;Qd_IMb^a<_TmytZ2LcSC|RV_+B$YG+*lku%uI zHFzvS)KCs`B$!-=!LSt{u^(*vq>b5Ke6BT30LbwksQRzm%OII{H1kF}gHLkAmbZ$5yMyBOLK*hx1C z@m(|qF;sVw!=u2gagC{OAf{ux;SR1n>G8l(p^}R3BXWfgXpLB6NWN3UNRUcjxzV+j zm+#eleG9$b)+I%sT3fZ$6f&3pE7?0*(n?7${_5Ilm`}ye-CA-O)x873c^ve^P+=s6 z?e@mNgmY-s0Fqu$;0=2nA(K*%A@K_i`%>9w;u4Tw1T1`{mbTZVRKG$+=S#dwc@O`$ zlV;}cQs@6EVz%H(hY{Z#n9u!~Zf?h*mwlFD|Na1AUc8H4Sz#Uz+Ix!m3FYYK=Sc$0 rtNH)_;Eli!v6#On{9A_q)T6)E=5I^+PjB(JbNIjSVDlcrSQGyZT88;t literal 0 HcmV?d00001 diff --git a/build/classes/encryptdecrypt/DES.class b/build/classes/encryptdecrypt/DES.class new file mode 100644 index 0000000000000000000000000000000000000000..47fd6a892f6587452b745bd7dbef07063fa81725 GIT binary patch literal 11307 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 literal 0 HcmV?d00001 diff --git a/build/classes/encryptdecrypt/RC4.class b/build/classes/encryptdecrypt/RC4.class new file mode 100644 index 0000000000000000000000000000000000000000..91c94e57fed288762a68c6c2529dda78585ecbf3 GIT binary patch literal 2149 zcma)7-*XdH6#i~@)7^xHwxQclNF_y)Hff0xi~=o43uvLGg%-3Fm2FtsZPQIA*;vXr zj@XVqIzBkgIOBtT@mWS%N16Ts{uTZij-%ptcbER49mYws_ujMTeCM3+d^i35-(S}O zoWxWdN%Y3hiaz-`8^bxgt>b(g{TPVj6fVSRzNq0+95M9D$2-#Uu8u(+mo;38qY*HD{01y-M8^NHT0^E+1%)VD!+6<+|(HRe@Ng zWI667N0On-T7qr7=u~Fxsyt|D(?EXXW953aXos%k;<#+bKs#PCZ~$!v4oc4(25#a# zvKP>lreoSFO_!^VH#4u{eFGD?WndDw4P=mIwa>A9!*fb9iGdIBp@G-%xGXinoUDG3vj8L!UqC1rW{bF~G|C3ktG;yGn^)N+aY5$>?Q zfbs41y)YAH5M~NPgG>evA!Wdlbtazch0O~zZH|3pYSu22|1G9KINME&HP4=>Y|3() zW-v;poExRYJo?+#JaxF=huv=GWGm9C#A{&gB2TFSecJZ=sU=dRc6Q0zqY{w>w(b@n z-#6E0$_v9}+?uv8I991VEzlb}TMJ%ppgdnGySD3Xm4DFcR!ewA24xY^1?s^@2d{LJ zKNboSQbOD%q>8vkB&%Gb5K>`$9_DF~cEL57S%b(l3p~*uBl2vc{Nx9w`P@fH8LUFX zUg%5&7(pnG;ANf!Ucu22_CEcjf94U?M06Dmnd~aGHRze&5Sv&-yn7XUy4PTc#NNa{ z^%pd4W@=>?iLEnd6F+G*ql<0GjOhS1%t(B^ier8i8FX?do9WuUislzqkx1;{tqPM> zBw51&W^N<$!T(uBMBc=J3vtkA4S1Nzu0KYL(w8F5D>$6_8Ie@#>v671Dx2ccQpt}m zN5qd$|4{mrv+cgyuzV3|&)<=5T$=Ip(>~vHJ1>`1{&OE9k_yi4&(7^z-Y+WzeIzMX z*a%SI2tgGzPzR0FL6X*^+-FH_4~JRcC@<4;i}cQt)(5nG#`ZfHb&~DqJa@y`Y*=*|(_%Tol4n(5)GL*1j1HE$W6v-QlD96f!7))_h~Pv&iQyhLrEAW04MIz;~zZ`eM3$*2^GCLbHLt`J4iDs2T{?NNM>H)&Jo r`JF!qm34gUlOAOia>$XVgo|lt)$o>vQ+x_S@b6E2!R0iaA~^FO|KG92 literal 0 HcmV?d00001 diff --git a/build/classes/encryptdecrypt/RC4.rs b/build/classes/encryptdecrypt/RC4.rs new file mode 100644 index 0000000..1fad6e3 --- /dev/null +++ b/build/classes/encryptdecrypt/RC4.rs @@ -0,0 +1 @@ +encryptdecrypt.RC4 diff --git a/build/classes/encryptdecrypt/TripleDES.class b/build/classes/encryptdecrypt/TripleDES.class new file mode 100644 index 0000000000000000000000000000000000000000..f72c8de381259c49928184e75a07aa0262b13185 GIT binary patch literal 12037 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 literal 0 HcmV?d00001 diff --git a/build/classes/encryptdecrypt/UtilFile.rs b/build/classes/encryptdecrypt/UtilFile.rs new file mode 100644 index 0000000..5650d9c --- /dev/null +++ b/build/classes/encryptdecrypt/UtilFile.rs @@ -0,0 +1 @@ +encryptdecrypt.UtilFile diff --git a/dist/EncryptDecrypt.jar b/dist/EncryptDecrypt.jar new file mode 100644 index 0000000000000000000000000000000000000000..09a014f0c293e1275b731195c29f59d0c278e148 GIT binary patch literal 60987 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%0D%*P0|j;v4iZ>EI9Ol^p}jx{LI;5ggpLAP2%Q8R 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 gkzsnA>lS|w{RR6ekLTWlmt(CA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties new file mode 100644 index 0000000..c4d6d32 --- /dev/null +++ b/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=a64f7383 +build.xml.script.CRC32=351b0b0d +build.xml.stylesheet.CRC32=8064a381@1.80.1.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=a64f7383 +nbproject/build-impl.xml.script.CRC32=6b2d5a37 +nbproject/build-impl.xml.stylesheet.CRC32=830a3534@1.80.1.48 diff --git a/nbproject/private/private.properties b/nbproject/private/private.properties new file mode 100644 index 0000000..e5930ea --- /dev/null +++ b/nbproject/private/private.properties @@ -0,0 +1,2 @@ +compile.on.save=true +user.properties.file=C:\\Users\\Nirzak\\AppData\\Roaming\\NetBeans\\8.2\\build.properties diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml new file mode 100644 index 0000000..fbb017b --- /dev/null +++ b/nbproject/private/private.xml @@ -0,0 +1,13 @@ + + + + + + file:/D:/Java%20Codes/EncryptDecrypt/src/EncryptDecrypt/EncryptDecrypt.java + file:/D:/Java%20Codes/EncryptDecrypt/src/EncryptDecrypt/TripleDES.java + file:/D:/Java%20Codes/EncryptDecrypt/src/EncryptDecrypt/UtilFile.java + file:/D:/Java%20Codes/EncryptDecrypt/src/EncryptDecrypt/DES.java + file:/D:/Java%20Codes/EncryptDecrypt/src/EncryptDecrypt/RC4.java + + + diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..a4d80c6 --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,74 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/EncryptDecrypt.jar +dist.javadoc.dir=${dist.dir}/javadoc +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.external.vm=true +javac.processorpath=\ + ${javac.classpath} +javac.source=1.8 +javac.target=1.8 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=encryptdecrypt.EncryptDecrypt +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..a4fb7e9 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,15 @@ + + + org.netbeans.modules.java.j2seproject + + + EncryptDecrypt + + + + + + + + + diff --git a/src/EncryptDecrypt/ArtCover.jpg b/src/EncryptDecrypt/ArtCover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dcef43fe4a88f883d58f808fd664e60850c43e14 GIT binary patch literal 12323 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 literal 0 HcmV?d00001 diff --git a/src/EncryptDecrypt/DES.java b/src/EncryptDecrypt/DES.java new file mode 100644 index 0000000..71c8f0d --- /dev/null +++ b/src/EncryptDecrypt/DES.java @@ -0,0 +1,358 @@ +package encryptdecrypt; + +import javax.swing.JOptionPane; + +public class DES{ + private static int[] Table_IP = { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, + 36,28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, + 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, + 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 + }; + private static int[] Table_FP = { 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, + 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, + 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51,19, 59, 27, 34, + 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25 + }; + private static int[] Table_P = { 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, + 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, + 25 + }; + private static int[] Table_Expand = { 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, + 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, + 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1 }; + + //const for sboxes + private static int[][][] Table_SBox = { + { { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 }, + { 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 }, + { 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 }, + { 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 } + }, + { { 15, 1, 8, 14, 6, 11, 3, 2, 9, 7, 2, 13, 12, 0, 5, 10 }, + { 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 }, + { 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 }, + { 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 } + }, + { { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 }, + { 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 }, + { 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 }, + { 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 } + }, + { { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 }, + { 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 }, + { 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 }, + { 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 } + }, + { { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 }, + { 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6 }, + { 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 }, + { 11, 8, 12, 7, 1, 14, 2, 12, 6, 15, 0, 9, 10, 4, 5, 3 } + }, + { { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 }, + { 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 }, + { 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 }, + { 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 } + + }, + { { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 }, + { 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 }, + { 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2 }, + { 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 } + + }, + { { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 }, + { 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 }, + { 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 }, + { 2, 1, 14, 7, 4, 10, 18, 13, 15, 12, 9, 0, 3, 5, 6, 11 } + + } }; + + //const for key preparation + //permutation 64 -> 56 bit + private static int[] Table_P1 = { + 15, 7, 57, 49, 41, 33, 25, 17,26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 9, + 1, 58, 50, 42, 34, 11, 3, 60,52, 44, 36, 63, 45, 37, 29, 21, 13, 5, 28, + 20, 12, 4,62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 55, 47, 39, 31, 23 + }; + //permutation 56 -> 48 bit + private static int[] Table_P2 = { 23, 19, 12, 4, 26, 8, 16, 14, 17, 3, 28, + 15, 6, 21, 10, 39, 56, 34, 53, 46, 42, 50, 36, 40, 51, 45, 33, 20, 13, 2, + 41, 52, 30, 48, 44, 49, 29, 32, 1, 5, 7, 27, 31, 37, 11, 24, 47, 55 + }; + //shift value for each position + private static int[] Table_Rotation = { 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1, + 1, 1, 2, 2 + }; + + + static byte[][] desKey = new byte[16][]; + + public void Encode(String key, String path){ + System.out.println("Encode DES algorithm"); + + prepareKey(key.getBytes());//calling method for preparing key + byte[] result = makeOutput(new UtilFile().read(path), true); + + new UtilFile().write(result,path);//File Creation + JOptionPane.showMessageDialog(null, "Your file is encoded successfully", "Encode Status", JOptionPane.INFORMATION_MESSAGE); + } + + public void Decode(String key, String path){ + System.out.println("Decode DES algorithm"); + + prepareKey(key.getBytes());//calling method for preparing key + byte[] result = makeOutput(new UtilFile().read(path), false); + + new UtilFile().write(result,path);//File Creation + JOptionPane.showMessageDialog(null, "Your file is decoded successfully", "Decode Status", JOptionPane.INFORMATION_MESSAGE); + } + + public byte[] Encode_onfly(String key, byte[] data){ + System.out.println("Encode ON FLY DES algorithm"); + + prepareKey(key.getBytes()); + return makeOutput(data, true); + } + + public byte[] Decode_onfly(String key, byte[] data){ + System.out.println("Decode ON FLY DES algorithm"); + + prepareKey(key.getBytes()); + return makeOutput(data, false); + } + + + private void prepareKey(byte[] byteKey){ + // PC1 permutation -> 56 + byte[] tmpK = P_Func(byteKey, Table_P1); + + // first 28 bits + byte[] F = Get_Bits(tmpK, 0, 28); + // second 28 bits + byte[] S = Get_Bits(tmpK, 28, 28); + + // generate 16 subkeys + for (int i = 0; i < 16; i++) { + + //left rotation bit + F = LR_Bits(F, 28, Table_Rotation[i]); + S = LR_Bits(S, 28, Table_Rotation[i]); + + //bond both 28 bits array + byte[] sub56key = Bond_Bits(F, 28, S, 28); + + //PC2 permutation -> 48 + desKey[i] = P_Func(sub56key, Table_P2); + } + } + + private byte[] makeOutput(final byte[] dataFile, boolean encode){ + + byte[] B_64bits = new byte[8]; + + if(encode){ + //add padding if file is not 64 bit % + int i, lenght=0; + lenght = 8 - dataFile.length % 8; + + byte[] padding = new byte[1]; + padding = new byte[lenght]; + padding[0] = (byte) 0x80; + for (i = 1; i < lenght; i++) + padding[i] =(byte) 0x0f; + + byte[] cipherFile = new byte[dataFile.length + lenght]; + + int count = 0; + for (i = 0; i < dataFile.length + lenght; i++) { + //encrypt bloc if have 64 bits + if (i > 0 && i % 8 == 0) { + B_64bits = elaborate64bits(B_64bits, true); + System.arraycopy(B_64bits, 0, cipherFile, i - 8, B_64bits.length); + } + //fill the bloc + if (i < dataFile.length) + B_64bits[i % 8] = dataFile[i]; + else{ + B_64bits[i % 8] = padding[count % 8]; + count++; + } + } + //encrypt last bloc + if(B_64bits.length == 8){ + B_64bits = elaborate64bits(B_64bits, true); + System.arraycopy(B_64bits, 0, cipherFile, i - 8, B_64bits.length); + } + + return cipherFile; + } else { + int i; + byte[] plainFile = new byte[dataFile.length]; + + for (i = 0; i < dataFile.length; i++) { + if (i > 0 && i % 8 == 0) { + B_64bits = elaborate64bits(B_64bits, false); + System.arraycopy(B_64bits, 0, plainFile, i - 8, B_64bits.length); + } + if (i < dataFile.length) + B_64bits[i % 8] = dataFile[i]; + } + B_64bits = elaborate64bits(B_64bits, false); + System.arraycopy(B_64bits, 0, plainFile, i - 8, B_64bits.length); + + //remove padding + int count = 0; + i = plainFile.length - 1; + while (plainFile[i] ==(byte) 0x0f) { + count++; + i--; + } + + byte[] tmp = new byte[plainFile.length - count - 1]; + System.arraycopy(plainFile, 0, tmp, 0, tmp.length); + + return tmp; + } + } + + private static byte[] elaborate64bits(byte[] array, boolean encode) { + byte[] tmp = new byte[array.length]; + byte[] first32bits = new byte[array.length / 2]; + byte[] second32bits = new byte[array.length / 2]; + + tmp = P_Func(array, Table_IP); + + second32bits = Get_Bits(tmp, 0, Table_IP.length/2); + first32bits = Get_Bits(tmp, Table_IP.length/2, Table_IP.length/2); + + for (int i = 0; i < 16; i++) { + byte[] tmpR = first32bits; + if(encode) + first32bits = F_Func(first32bits, desKey[15-i]); + else + first32bits = F_Func(first32bits, desKey[i]); + + first32bits = XOR_Func(second32bits, first32bits); + second32bits = tmpR; + } + + tmp = Bond_Bits(first32bits, Table_IP.length/2, second32bits, Table_IP.length/2); + + tmp = P_Func(tmp, Table_FP); + return tmp; + } + + private static byte[] F_Func(byte[] a, byte[] b) { + byte[] tmp; + tmp = P_Func(a, Table_Expand); + tmp = XOR_Func(tmp, b); + tmp = S_Func(tmp); + tmp = P_Func(tmp, Table_P); + return tmp; + } + + private static byte[] S_Func(byte[] array) { + array = Sunder_Bytes(array, 6); + byte[] out = new byte[array.length / 2]; + int halfByte = 0; + for (int b = 0; b < array.length; b++) { + byte valByte = array[b]; + int r = 2 * (valByte >> 7 & 0x0001) + (valByte >> 2 & 0x0001); + int c = valByte >> 3 & 0x000F; + int val = Table_SBox[b][r][c]; + if (b % 2 == 0) + halfByte = val; + else + out[b / 2] = (byte) (16 * halfByte + val); + } + return out; + } + + + + // util bit + /////////// + private static byte[] P_Func(byte[] input, int[] table) { + int nrBytes = (table.length - 1) / 8 + 1; + byte[] out = new byte[nrBytes]; + for (int i = 0; i < table.length; i++) { + int val = Get_Bit(input, table[i] - 1); + Set_Bit(out, i, val); + } + return out; + } + + private static byte[] Get_Bits(byte[] input, int pos, int n) { + int num = (n - 1) / 8 + 1; + byte[] out = new byte[num]; + for (int i = 0; i < n; i++) { + int val = Get_Bit(input, pos + i); + Set_Bit(out, i, val); + } + return out; + } + + private static void Set_Bit(byte[] data, int pos, int val) { + int posB = pos / 8; + int posb = pos % 8; + byte tmpB = data[posB]; + tmpB = (byte) (((0xFF7F >> posb) & tmpB) & 0x00FF); + byte newByte = (byte) ((val << (8 - (posb + 1))) | tmpB); + data[posB] = newByte; + } + + private static int Get_Bit(byte[] data, int pos) { + int posB = pos / 8; + int posb = pos % 8; + byte tmpB = data[posB]; + int bit = tmpB >> (8 - (posb + 1)) & 0x0001; + return bit; + } + + private static byte[] LR_Bits(byte[] input, int len, int pas) { + int num = (len - 1) / 8 + 1; + byte[] out = new byte[num]; + for (int i = 0; i < len; i++) { + int val = Get_Bit(input, (i + pas) % len); + Set_Bit(out, i, val); + } + return out; + } + + private static byte[] Bond_Bits(byte[] a, int aLen, byte[] b, int bLen) { + int num = (aLen + bLen - 1) / 8 + 1; + byte[] out = new byte[num]; + int j = 0; + for (int i = 0; i < aLen; i++) { + int val = Get_Bit(a, i); + Set_Bit(out, j, val); + j++; + } + for (int i = 0; i < bLen; i++) { + int val = Get_Bit(b, i); + Set_Bit(out, j, val); + j++; + } + return out; + } + + private static byte[] Sunder_Bytes(byte[] array, int len) { + int num = (8 * array.length - 1) / len + 1; + byte[] out = new byte[num]; + for (int i = 0; i < num; i++) { + for (int j = 0; j < len; j++) { + int val = Get_Bit(array, len * i + j); + Set_Bit(out, 8 * i + j, val); + } + } + return out; + } + + private static byte[] XOR_Func(byte[] a, byte[] b) { + byte[] out = new byte[a.length]; + for (int i = 0; i < a.length; i++) { + out[i] = (byte) (a[i] ^ b[i]); + } + return out; + } +} diff --git a/src/EncryptDecrypt/EncryptDecrypt.java b/src/EncryptDecrypt/EncryptDecrypt.java new file mode 100644 index 0000000..9c9ad81 --- /dev/null +++ b/src/EncryptDecrypt/EncryptDecrypt.java @@ -0,0 +1,258 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package encryptdecrypt; + +/** + * + * @author Nirzak + */ +import java.awt.*; +import java.awt.event.*; +import java.io.*; + +import javax.swing.*; + +public class EncryptDecrypt extends JPanel implements ActionListener { + + //Labels to identify the fields + private JLabel KeyLabel; + private JLabel TypeLabel; + private JLabel FileLabel; + private JLabel Imagelabel; + + //Strings for the labels + private static String KeyString = "Encode/Decode Key : "; + private static String TypeString = "Encryption Type : "; + private static String FileString = "Path to File : "; + + //Fields for data entry + private JTextField KeyField; + private JTextField FileField; + private JComboBox TypeList; + + //Button for access + private JButton btnEncode; + private JButton btnDecode; + private JButton btnFile; + + // Font for writting + private Font labelFont; + private Font textFont; + private Font buttonFont; + private Font ComboFont; + + // For using hand cursor + private Cursor cursor; + + //For showing header image + private ImageIcon image; + + + public EncryptDecrypt() { + // TypeArray for Combo Box + String[] TypeArr = {"RC4", "DES", "3DES"}; + + // Block for controling fonts + labelFont = new Font("TIMES NEW ROMAN", Font.BOLD, 18); + textFont = new Font("TIMES NEW ROMAN", Font.BOLD, 20); + buttonFont = new Font("TIMES NEW ROMAN", Font.BOLD, 22); + + // Creating hand cursor + cursor= new Cursor(Cursor.HAND_CURSOR); + + //Creating image & imagelabel + image= new ImageIcon(getClass().getResource("Project_image.jpg")); + + //Creating the labels & set their properties + Imagelabel= new JLabel(image); + Imagelabel.setBounds(0,0, 900, 200); + + + KeyLabel = new JLabel(KeyString); + KeyLabel.setBounds(10, 220, 175, 40); + KeyLabel.setBackground(Color.BLACK); + KeyLabel.setOpaque(true); + KeyLabel.setForeground(Color.orange); + KeyLabel.setFont(labelFont); + + TypeLabel = new JLabel(TypeString); + TypeLabel.setBounds(10, 270, 175, 40); + TypeLabel.setBackground(Color.black); + TypeLabel.setOpaque(true); + TypeLabel.setForeground(Color.orange); + TypeLabel.setFont(labelFont); + + FileLabel = new JLabel(FileString); + FileLabel.setBounds(10, 320, 175, 40); + FileLabel.setBackground(Color.black); + FileLabel.setOpaque(true); + FileLabel.setForeground(Color.orange); + FileLabel.setFont(labelFont); + + //Creating the text fields and set their properties. + KeyField = new JTextField(""); + KeyField.setBounds(220, 220, 500, 40); + KeyField.setBackground(Color.black); + KeyField.setForeground(Color.green); + KeyField.setFont(textFont); + KeyField.setToolTipText("Please input key more than 8 characters"); + + TypeList = new JComboBox(TypeArr); + TypeList.setBounds(220, 270, 500, 40); + TypeList.setBackground(Color.black); + TypeList.setForeground(Color.green); + TypeList.setToolTipText("Please use this Combo Box to use other method"); + TypeList.setFont(new Font("TIMES NEW ROMAN", Font.BOLD, 24)); + + TypeList.setSelectedIndex(0); + + FileField = new JTextField(""); + FileField.setBounds(220, 320, 500, 40); + FileField.setBackground(Color.black); + FileField.setForeground(Color.green); + FileField.setCursor(cursor); + FileField.setFont(textFont); + + //Creating buttons & set their properties. + btnEncode = new JButton("Encode File"); + btnEncode.setBounds(20, 370, 160, 50); + btnEncode.setBackground(Color.black); + btnEncode.setForeground(Color.yellow); + btnEncode.setFont(buttonFont); + btnEncode.setCursor(cursor); + btnEncode.setToolTipText("Click here to encode"); + btnEncode.setVerticalTextPosition(AbstractButton.CENTER); + btnEncode.setHorizontalTextPosition(AbstractButton.CENTER); + btnEncode.addActionListener(this); + + btnDecode = new JButton("Decode File"); + btnDecode.setBounds(220, 370, 500, 50); + btnDecode.setBackground(Color.black); + btnDecode.setForeground(Color.yellow); + btnDecode.setFont(buttonFont); + btnDecode.setCursor(cursor); + btnDecode.setToolTipText("Click here to decode"); + btnDecode.setVerticalTextPosition(AbstractButton.CENTER); + btnDecode.setHorizontalTextPosition(AbstractButton.CENTER); + btnDecode.addActionListener(this); + + btnFile = new JButton("Select File"); + btnFile.setBounds(720, 320, 150, 50); + btnFile.setBackground(Color.black); + btnFile.setForeground(Color.yellow); + btnFile.setFont(buttonFont); + btnFile.setCursor(cursor); + btnFile.setToolTipText("Click here to select the file"); + btnFile.setVerticalTextPosition(AbstractButton.CENTER); + btnFile.setHorizontalTextPosition(AbstractButton.CENTER); + btnFile.addActionListener(this); + + + // Setting panel components to panel + this.add(Imagelabel); + this.add(KeyLabel); + this.add(TypeLabel); + this.add(FileLabel); + + this.add(KeyField); + this.add(TypeList); + this.add(FileField); + + this.add(btnFile); + this.add(btnEncode); + this.add(btnDecode); + + this.setBounds(0, 0, 900, 500); + this.setLayout(null); + this.setBackground(Color.darkGray); + } + //Action Event Block + @Override + public void actionPerformed(ActionEvent e) { + //action event for encoding + if (e.getSource() == btnEncode) { + String key = KeyField.getText(); + String filePath = FileField.getText(); + int typeKey = TypeList.getSelectedIndex(); + + if (key.length() < 8 && filePath.length() < 1) { + JOptionPane.showMessageDialog(this, "Error.The key must be 8 char min and specific a path to file.", + "Error", JOptionPane.ERROR_MESSAGE); + } else { + switch (typeKey) { + case 0: + //encode RC4 + new RC4().Encode(key, filePath); + break; + case 1: + //encode DES + new DES().Encode(key, filePath); + break; + case 2: + //encode 3DES + new TripleDES().Encode(key, filePath); + break; + } + } + } //action event for decoding + else if (e.getSource() == btnDecode) { + String key = KeyField.getText(); + String filePath = FileField.getText(); + int typeKey = TypeList.getSelectedIndex(); + + if (key.length() < 8 && filePath.length() < 1) { + JOptionPane.showMessageDialog(this, "Error. The key must be 8 char min and specific a path to file.", + "Error", JOptionPane.ERROR_MESSAGE); + } else { + switch (typeKey) { + case 0: + //decode RC4 + new RC4().Decode(key, filePath); + break; + case 1: + //decode DES + new DES().Decode(key, filePath); + break; + case 2: + //decode 3DES + new TripleDES().Decode(key, filePath); + break; + + } + } + } //action event for choosing file to encrypt or decrypt + else if (e.getSource() == btnFile) { + JFileChooser fc = new JFileChooser(); + int returnVal = fc.showOpenDialog(EncryptDecrypt.this); + + if (returnVal == JFileChooser.APPROVE_OPTION) { + File file = fc.getSelectedFile(); + FileField.setText(file.getPath()); + } + } + } + //Creating and showing frame + private static void createAndShowFrame() { + JFrame frame = new JFrame("EncryptDecrypt"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setBounds(250, 250, 900, 500); + frame.setResizable(false); + frame.add(new EncryptDecrypt()); + frame.setLayout(null); + frame.setVisible(true); + } + + public static void main(String[] args) { + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + UIManager.put("swing.boldMetal", Boolean.FALSE); + createAndShowFrame(); + } + }); + } +} diff --git a/src/EncryptDecrypt/Project_image.jpg b/src/EncryptDecrypt/Project_image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dcef43fe4a88f883d58f808fd664e60850c43e14 GIT binary patch literal 12323 zcmeHtcT`hd*XLC_N|7dlfKmiRKq(?pq9R?4fPmCIih_^_5Gg?jL`6lq6hYt-q=_^m zC3J{%0TJmEkU$WS5=cP8g@k0T@B6OroAv%RGvBP4HEW)eyR+`PIp<{m_Sxl}y)Ww< zYX%UsFflg)_U+pT`~iIc)+``v9OC5x09IDONdN%2q2Gi6Ht232^!Z0)O#(*1{(bv? zU;k=s9BjWECp$YE2Nx$7*KgwHIl#ls&CAWj#mmRbd*C3{xOn&l_zv>_zW+VR@8Q2k zLDxZUF7Dqw{^uI&BXEctK<>9^+b0X`KeUhS&^}fNAOrEr0U`Pg>R)Z&el~UvPKYJm z15gK?AjCc!+kS{y4t92^cR2Jrzm-W8WrR#oF_YU}D7+S)rhyShL1^bQS= zjE;?en;^`R=6=jCEdE?trfzKh+M;cPJG;Me?E~2U3F|+Q{Tr@B5U%~u8nAQy#^c>>S6>a0*?t=DO)GEUWQ|TjWwwZbd7PoTd#$^w#}BUNL#CSq18EX#YU=KL+ga z{}QtQ0QR4_2*5$MebC~u9Rgqg1H%HMDk4URzwQ%dSO8^qnFTPCOc@5Tw6`oEKMiC7 zPzM1A7VslxhZzIxvN5GQ>9&}`J~TA4J*t!iY#7T>XzGM4W`gq^3t%2KK(K&hmBn2p zwx0rE*kQ623ouos{+@?l8p{HDL@@2&@ZNsAx_*f)0KB(_VVYrce!dZS1Djn%;B@wm z)^-1;sXn4gM&)zWTZPKl4O`gwU;D^N|u&dq1v40lHEwCYEAJw zx1x@4IdkSfnn#LHeJp){cz5rOAK#n&mBi;xl&G1Cs^e;Nc0{jkF4RsC`*!Ph^6caO z;H9U~GWTBNZ#!aUG8#NPSwLh1wu_E&@sRp>z6E}Ky zZXVTm{TXF)2Emtop|B(+b_t5{GIuQTjMGB_#v(TIN_jEBKPm1STY9CO8=Pkp4PIjhRQk|JdS4wog8QKTFqglLW;W5Lvc}Um?xo*qd02etRF5q z?tatR)4KNDH;m-;p57|Sy}&11Ij)ufzntRp%babfuhdIDgW_>_1p)131o1Q3cy>cW zOlyloE!jGcp%XPTkl3V+%{q5%2-j?~ZAq1?7|E@&o?kw!!!LfSf77HdLv@Nw2u|!_ zkmauviT9Sv!Id2ia)@$Kz7Kl1>L8<8E6`=Q?byr&nBsJW4KuZNjplQ*%yyB&E%sd9gwYk6W6=1=&9a2E^sP)p_`!Jk6-tAG9?3WFYZ68sOg_%wg^ zeQZ|r>)+S1C_Q#wt21KkO z@{F;U(GJ41F}Xl2EeR~o4Uzds;M5Vd^4lD^^chPZ{6^Lwc+2cbo75xSHvPq2C82FGw!FJoX zc!N>KDL@`zh$J$(J?T2kFA(=|7VxYA8^tidP*yr4)R3;o4yHQQzA>x>78w{)-Z9>p z`@EB*vo+J%`9_}eyA{73Sl+&arz8C`371#wtLz5nI}vMkVu(pXX<`!x>;tLkMNSni4M{^|GqLkp`aagw-Q%y`{TNr z>YyXKaOe4y`k;!8;lNc#Of%C8cq#wc8=RS_Oc$}){YdwY<@KKZ_!>CiS12_1K|Sb$tRkq<4$J*p6v7Q`HDI8_r| zlZH$r_H#5$^&MkBWwx}Sq4gm;6btHh(_r8u`i+QoSXKDqDs?v8fuz_DJ2?5t0Zw_D z;w_}zM5~D{a_RH~JdzIySv2Nf5;W6%ICY0CqhRrsZd-|;a6-WKyjH>_OmtqJ4ARFS zT4Q65&o_w?%hOQ;;dJClC=4f5;wPGa0e8x3^blX1kH4BJlSdn_R zj_3>L=ORld$u)g`K6;X77H#E!TJ{C`KGHer@M8%Y84$ABj*)7SVrWw}y_^IRna7a! zgiD~~qUOr^V|B^$G0s2b*qwbh?;lSZyC+y>Qev02HO}PU*(<2VKf-Vr@-aWR2(o~S zxX3G3M%SJl;e8%B8UDi2S!AiA;8D(q<%lZ6%sYPwy-X7O*LUUNgaI-~;`rXbN z8qsgVlt*zDI=iwHsoM7#ALb@%WJ+LYRszj~Q@0ClWQD44nxqS{XU7HrJy8~`_ zJMBSzBGVa~?sOeYt7RT^N`GG<{N2kWm%O-ls(Z9N@Ym@tJCbgw zn&9LpWC0wr;5>3T@uV#PtoZdFO>h>0lJmC1%5b>1z04Uvq9kcn@N9VMXS|_5sLpT z(H|pYW=665i4g-(Nb)0}q1$+824hK5_c!!XE1t_)`4_)^jZ~eQJd+lj`QRlF^Or&B zcrvE7Ia?x%CQn)H#7+*-9@o`YVEh+)f>e*|1+=HXij`{SGaAF=#vk2X!So5LFTN zGg9s(R6AWVGN{PNA8QbEmm(>?-ccLj61J9nnsi7Sj7+=qc`83xhH~GtlaGrwyw}Kp zLOuEzXvCha3;Kn5&h8zy9}Yq#jC2MeMX*KfMY84P)z<0Hd-Q~^I|~NOW^QA^vvLk2 zcpvr2MB2MOY?A|0hxRtF@9j57XR!uk$ePQPL6f&3>WmT6lNVk8huKl8+eL^^E*S!z z;;)#9TaOv?vWE$w?cS^y9;+IX&-zj~h|_C)RT##l#@Sa_HXS~w=A^BbU^iqoYWpNB z_fqXdlvd;PxFuYzaeLLyBF2z_Gh9}wsj-^GF8oyk29Z4dAVnyhB) zFn8AzrM2j1b4kv~@0QlXXxN*HKE<>&T9Vi1#UO>x2}k9VKbw4Of5r9cod9^Qo5>?d zDP{89p_?((N1FtYSe^F7=f(Qt+2XF(WBY`?6!1BsxF3U`KUH?0f8u51E?FuhWp;73 zg?lf1i#XZGJ%SiP4Pco6zg{{ z=p2iiVGgqZ+!&;XT>Bv_`bgwxQl8Zdi^V@_5g2u^tfaf}bC%xmk#k$t@sXL1_e>B_ zHTq*ULALcq<I`XZ`W;ML?_QO@9worM4)ULf_GS&q{+n{?Du%iD%BU*p7jD+3`mg|Ou_huu zEh>9ig-BvvE!!L8cPZy$-5~;DuUvK};ucKa+zYwU?l69vC@eU}-z@i*BGX zHs!*-m9b{n=TFPg(0U!;QTZc++N=J`4gM)HCW5yL44`t^e_cgey$NX>zfyPlL{(mR z5#5jli1)Sm-h6f|<5OQpeV55ab|~YSL%9!Mb*CDU1XjuKLfUDrlvFo`uMt{^8$>i5 z!{ywEDF@%HgdEbU7rf*=P+@oK%ZFlxOkMsT)25q|RLzgc=rhzWMYHrQvd*=}p*wW# z&tpOvyn;feJJ)UKr}92qH<=G8!trR{~)j^f>-f-KJ!t7eZ)sKt&4*%?a-O~2;UK2#Lc z7Aq7b6W1N+321|Cl?*aFaiC}(%;ChemSm0?=FA|(3?%kZAVt3k1^ue{r_`L!I4@>sREA^v@6cd3*5h9Q@!eJf=QRWa4Cqe~HyP3MfV(o2iys64mVaMARpHvgS zq_~*L9xM~NP$8iGqUt1+zouM(Po6}8%C(H6ill)!84+03EY*1Y$rcYz*p<5CHT!=- zDR4Qzw)Jo8w6CB5{XAF-`SfRx!6mBfZZ8Yy8k4hW{y-r{YB_jlmYwJ|^DS%;EU4ru zOmer27XNtpp#$VYI3%FW(zy_LH-h3k0D9mjuJ+{O>W0bhwJnj&7RVJD-huh*^b?lP zHWhBT$M)Qk_rz$pK1}`;xts$k55!@7)}LW0*NE}SXgN@`fN`dZY9!hWwt5x5`q4Bf z_xRi#GDpx`xW}_7uTw(IOyXPDpfW+6Qymhb9+{zwq}wxxJ}gVC4K_JYB`oz|AC?F8 ztEAk9$%i>(gzC~17yDB{2w{Lx_WW1ozx2Xc2 zH|~hQr*-$&z^W8i-6<+eUd!2>iG&Se+qBwnV7U2e%W;MS7*A3)H6Q+??%Cnwg@LQJ zADXJ45s@ax9pBHVKKMKnWoJXf&%B0FtgsXAw2zQj2AQFvN{j^# z2*o;EB0~-x?1SyXUI!h@wtJ?0E7MTq%x2^|BHd6Q3LJ76FW3RJAGNu=1Iyt(ePB2c z5@bB8+fB*-17$+P!qVl$o4LOF%_AEXlRH&r&fZ-E8{&{C*c zFEH*u&n}ui-mxC{DNj`m3;pzYAAw$e?=-*r5B`@oLSrY+Zz0+_iLc3?eu}j(dpk{r zX<7|E3L8YX^71Qwu?UKlAE-F+@jHt4q6K{V&dZHwq%1JDzC{X@YH|!0B^MS}Tlq-m zN?NM)1fU*-iBuZ@pYRl80Zv8$)wCTO9XzcHzPwY|lH{izE8j4hSKk1~JveZ(nfMY96~iq*$n;s(4A8~KsKOjGkbG*7{|-KFY%plz53-qhzsHK zmzBF&1+bHaW%g@BX5HNBM{cR)6;9bc+d5JHBh^7CFZgRrux&N%iF0~C9Z!MFLy~=n zX+4SYzz9J~$)3IMc3=wyDxCVZ;{QHXyPb~F?(AV-%~GgZ}fLO zBA5fl_V*WH!H_hsLr64Wo_J7IV3kPS`Gt9sLn#V^?VmCdc+4;_0we84)LhI()+M}o zg8UWAHk4yD)h9@iD$0a+!MLz=hDa1iHbjoerwvH`V?u;`F};qgV<`hl!Z zHcCZ}KnhpVpK>STG&a+&@s`ECmHQqaVzf#)vo@cP4|kXnkMQb!d9~6Pj#R>`yAEXF zX9$VliK35qP$?&&MgAM(7R570yA#A9#flUd(kGCr3VAQcmR_o}@oMOS?_ZeSQ{oQ}UR~5>KlfOs!r0l> z?-sbpEBEp3+89{GX{uY{+<@qE=0e4Tv-zdS!}p19-#MXs6sR}=mAMNjn|OF{%X&-*s! zE{8sgeSf#sAF;Ii^lAH~>kXI7v!qPrYf%Z8gY4~XcwcZIi|PAUnfU{A{05 zH|{5gh#|3#^`mMwX9n3*8b2WZ@OM>jM@*K^dA8;NiM%1Oxx=06JfN%PhrwTdqQq}Y zGxetyKgHN3F36{BY{0dDOf1Bly{h7&Q=au*N+7aD2~3$CPxR5Zn}rg^E13c@TJ%Vi zSLxFD5P|4?B_P8l@TM$Yae*%zu8pNy&Y==uUU+FI=yd`?{UDOxk(K_V!OEo}IgWKB zp3ek3N{$qH`U|DI$IbYVC#4N@*~=14q#?dVYq=dMBEGJ zFrJ-x7D^;Mv+U&|Y+hmWV>KQ~dMo(UTCqolat$*{ z?9QQFhY|X&gYk37=eL?h3!GIIt>_mlRXIQDZuq#PPL{+rr6tv@1*87-)t)(0z$W77 z>+|QNn**~<>E~oZd_m4@{OrIqesYeMOTnz_umH|Qv?i!SLCj&=4Ui;-a$1_c1zL2j z*>KTzc;4&Ih_6TFYSqqXu`Tz+&lj!^Ctp~A&KqYVhGd{Tl$WZ<u@xN`69)Dkr8?n~$aeTs`{f8uRUnM7POS=~g=yb|? zqHl~W^Ew|-OE39$rB-abCZ*}H*hb`wCD|9fA2+yl%f3#KP42@*9Z(A^Q?9CCe_`Vh zHKv^d1h^%x5{#$Xl31IfU8bUnz`gXz4o(q+f}*1XUIb=>Z{nBu+*KUMZM@Y+m}tqSv;_!_gI z9I2r~NbKz4xH7cytU;I)rTckxt%jp_rqybVLt5NLo56lbmE2ajlcwzBw$v(GGgv{l zbaI?zn1ZjV!X)R;QIwVzUw%1!^ci~`NK`B zbZ^FO3cPIseISqF1ZL!evLVw)&<1x%u`A&xFJoHXPAD7_^__Vy5W2}3-jy8V>NkQk z_KhkEy@s7G45Y7*pM>-^w*7GPQZ;MK|Mw@M0^)h@kLjeC)w z%@L%DX|;zISDAG8$6i5;p}FM#vT`b${qaZ3+;rm*4w3A}SmTOf(z^IEQBdC$Rff#W z&M)`gjohhq7~fV82)GY+EhhDNoMTH4vjO3qgrbKGWB0P3p=r7KD-yT+0z5J9_h{Q^ zlZ$(Mjy^Y%+plrN?AVx{2rX2=q-?+ja^-(A?(F6L;{Jtyju2}(0j^udT-0y`qdE^0 z3LDOS5trX+c&u^HKikSbho7kc{-^LADFe>~yEP_$3qS4Ogg?e1GMC>l7&+>=8mibe zK){ot$R~YZv+ig!>U!cNT%J%Ht$z_!lJ)099=M_D zCJI(#faPc{REtCfRcgK^F}UiWMWvJcbtq9%s8fIgBk@zc&EK5P*rU>qQ`I_l`}q^1UuqAo{8^}ITR9Ro51WM5J>0pTxG}B#O}U7 z&@HIh&!**!=ygDUGF^P7Z=HF6J0;Qd_IMb^a<_TmytZ2LcSC|RV_+B$YG+*lku%uI zHFzvS)KCs`B$!-=!LSt{u^(*vq>b5Ke6BT30LbwksQRzm%OII{H1kF}gHLkAmbZ$5yMyBOLK*hx1C z@m(|qF;sVw!=u2gagC{OAf{ux;SR1n>G8l(p^}R3BXWfgXpLB6NWN3UNRUcjxzV+j zm+#eleG9$b)+I%sT3fZ$6f&3pE7?0*(n?7${_5Ilm`}ye-CA-O)x873c^ve^P+=s6 z?e@mNgmY-s0Fqu$;0=2nA(K*%A@K_i`%>9w;u4Tw1T1`{mbTZVRKG$+=S#dwc@O`$ zlV;}cQs@6EVz%H(hY{Z#n9u!~Zf?h*mwlFD|Na1AUc8H4Sz#Uz+Ix!m3FYYK=Sc$0 rtNH)_;Eli!v6#On{9A_q)T6)E=5I^+PjB(JbNIjSVDlcrSQGyZT88;t literal 0 HcmV?d00001 diff --git a/src/EncryptDecrypt/RC4.java b/src/EncryptDecrypt/RC4.java new file mode 100644 index 0000000..5666e94 --- /dev/null +++ b/src/EncryptDecrypt/RC4.java @@ -0,0 +1,59 @@ +package encryptdecrypt; + +import javax.swing.JOptionPane; + +public class RC4{ + + private final byte[] S = new byte[256]; + private final byte[] T = new byte[256]; + private int keylen; + + public void Encode(String key, String path){ + System.out.println("Encode RC4 algorithm"); + //calling method for preparing key by Key Scheduling algorithm + prepareKey(key.getBytes()); + //creating output of the file + makeOutput(new UtilFile().read(path), path); + JOptionPane.showMessageDialog(null, "Your file is successfully encoded", "Encode Status", JOptionPane.INFORMATION_MESSAGE); + } + + public void Decode(String key, String path){ + System.out.println("Decode RC4 algorithm"); + + prepareKey(key.getBytes()); + makeOutput(new UtilFile().read(path), path); + JOptionPane.showMessageDialog(null, "Your file is successfully decoded", "Decode Status", JOptionPane.INFORMATION_MESSAGE); + } + //*preparing key block where we will apply key scheduling algorithm to the kry and then we will generate the key stream by appying PRGA algorithm*/ + private void prepareKey(byte[] byteKey){ + keylen = byteKey.length; + for (int i = 0; i < 256; i++) { + S[i] = (byte) i; + T[i] = byteKey[i % keylen]; + } + int j = 0; + for (int i = 0; i < 256; i++) { + j = (j + S[i] + T[i]) & 0xFF; + S[i] ^= S[j]; + S[j] ^= S[i]; + S[i] ^= S[j]; + } + } + //*encrypting or decrypting block where we will xor the key stream with file bytes so that together they can create the desired cipherfile*/ + private void makeOutput(final byte[] plainFile, String pathFile){ + final byte[] cipherFile = new byte[plainFile.length]; + int i = 0, j = 0, k, t; + for (int counter = 0; counter < plainFile.length; counter++) { + i = (i + 1) & 0xFF; + j = (j + S[i]) & 0xFF; + S[i] ^= S[j]; + S[j] ^= S[i]; + S[i] ^= S[j]; + t = (S[i] + S[j]) & 0xFF; + k = S[t]; + cipherFile[counter] = (byte) (plainFile[counter] ^ k); + } + + new UtilFile().write(cipherFile,pathFile);//creating file output + } +} diff --git a/src/EncryptDecrypt/TripleDES.java b/src/EncryptDecrypt/TripleDES.java new file mode 100644 index 0000000..a7d4ce4 --- /dev/null +++ b/src/EncryptDecrypt/TripleDES.java @@ -0,0 +1,385 @@ +package encryptdecrypt; + +import javax.swing.JOptionPane; + +public class TripleDES{ + + + private static int[] Table_IP = { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, + 36,28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, + 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, + 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 + }; + private static int[] Table_FP = { 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, + 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, + 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51,19, 59, 27, 34, + 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25 + }; + private static int[] Table_P = { 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, + 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, + 25 + }; + private static int[] Table_Expand = { 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, + 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, + 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1 }; + + private static int[][][] Table_SBox = { + { { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 }, + { 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 }, + { 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 }, + { 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 } + }, + { { 15, 1, 8, 14, 6, 11, 3, 2, 9, 7, 2, 13, 12, 0, 5, 10 }, + { 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 }, + { 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 }, + { 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 } + }, + { { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 }, + { 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 }, + { 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 }, + { 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 } + }, + { { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 }, + { 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 }, + { 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 }, + { 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 } + }, + { { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 }, + { 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6 }, + { 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 }, + { 11, 8, 12, 7, 1, 14, 2, 12, 6, 15, 0, 9, 10, 4, 5, 3 } + }, + { { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 }, + { 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 }, + { 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 }, + { 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 } + + }, + { { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 }, + { 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 }, + { 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2 }, + { 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 } + + }, + { { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 }, + { 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 }, + { 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 }, + { 2, 1, 14, 7, 4, 10, 18, 13, 15, 12, 9, 0, 3, 5, 6, 11 } + + } }; + + //const for key preparation + //permutation 64 -> 56 bit + private static int[] Table_P1 = { + 15, 7, 57, 49, 41, 33, 25, 17,26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 9, + 1, 58, 50, 42, 34, 11, 3, 60,52, 44, 36, 63, 45, 37, 29, 21, 13, 5, 28, + 20, 12, 4,62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 55, 47, 39, 31, 23 + }; + //permutation 56 -> 48 bit + private static int[] Table_P2 = { 23, 19, 12, 4, 26, 8, 16, 14, 17, 3, 28, + 15, 6, 21, 10, 39, 56, 34, 53, 46, 42, 50, 36, 40, 51, 45, 33, 20, 13, 2, + 41, 52, 30, 48, 44, 49, 29, 32, 1, 5, 7, 27, 31, 37, 11, 24, 47, 55 + }; + //shift value for each position + private static int[] Table_Rotation = { 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1, + 1, 1, 2, 2 + }; + + //string key + static String[] TripleDESKey=new String[3]; + //byte key + private static byte[][] desKey0; + private static byte[][] desKey1; + private static byte[][] desKey2; + + + public void Encode(String key, String path){ + System.out.println("Encode 3DES algorithm"); + + //generate key0, key1, key2 + TripleDESKey[0]=new String(key); + desKey0 = prepareKey(key.getBytes()); + + String keyReverse = new StringBuffer(key).reverse().toString(); + TripleDESKey[1]=new String(keyReverse); + desKey1 = prepareKey(keyReverse.getBytes()); + + String keySwap = key.substring(key.length()/2,key.length())+ + key.substring(0,key.length()/2); + TripleDESKey[2]=new String(keySwap); + desKey2 = prepareKey(keySwap.getBytes()); + + makeOutput(new UtilFile().read(path),path,true); + JOptionPane.showMessageDialog(null, "Your file is encoded successfully", "Encode Status", JOptionPane.INFORMATION_MESSAGE); + } + + public void Decode(String key, String path){ + System.out.println("Decode 3DES algorithm"); + + //generate key0, key1, key2 + TripleDESKey[0]=new String(key); + desKey0 = prepareKey(key.getBytes()); + + String keyReverse = new StringBuffer(key).reverse().toString(); + TripleDESKey[1]=new String(keyReverse); + desKey1 = prepareKey(keyReverse.getBytes()); + + String keySwap = key.substring(key.length()/2,key.length())+ + key.substring(0,key.length()/2); + TripleDESKey[2]=new String(keySwap); + desKey2 = prepareKey(keySwap.getBytes()); + + makeOutput(new UtilFile().read(path),path,false); + JOptionPane.showMessageDialog(null, "Your file is decoded successfully", "Decode Status", JOptionPane.INFORMATION_MESSAGE); + } + + private byte[][] prepareKey(byte[] byteKey){ + byte[][] desTmp = new byte[16][]; + // PC1 permutation -> 56 + byte[] tmpK = P_Func(byteKey, Table_P1); + + // first 28 bits + byte[] F = Get_Bits(tmpK, 0, 28); + // second 28 bits + byte[] S = Get_Bits(tmpK, 28, 28); + + // generate 16 subkeys + for (int i = 0; i < 16; i++) { + + //left rotation bit + F = LR_Bits(F, 28, Table_Rotation[i]); + S = LR_Bits(S, 28, Table_Rotation[i]); + + //bond both 28 bits array + byte[] sub56key = Bond_Bits(F, 28, S, 28); + + //PC2 permutation -> 48 + desTmp[i] = P_Func(sub56key, Table_P2); + } + + return desTmp; + } + + private void makeOutput(final byte[] dataFile, String pathFile,boolean encode){ + + byte[] B_64bits = new byte[8]; + + if(encode){ + //add padding if file is not 64 bit % + int i, lenght=0; + lenght = 8 - dataFile.length % 8; + + byte[] padding = new byte[1]; + padding = new byte[lenght]; + padding[0] = (byte) 0x80; + for (i = 1; i < lenght; i++) + padding[i] =(byte) 0x0f; + + byte[] cipherFile = new byte[dataFile.length + lenght]; + + int count = 0; + for (i = 0; i < dataFile.length + lenght; i++) { + //encrypt bloc if have 64 bits + if (i > 0 && i % 8 == 0) { + B_64bits = elaborate64bits(B_64bits,desKey0, true); + B_64bits = elaborate64bits(B_64bits,desKey1, false); + B_64bits = elaborate64bits(B_64bits,desKey2, true); + + System.arraycopy(B_64bits, 0, cipherFile, i - 8, B_64bits.length); + } + //filling the block + if (i < dataFile.length) + B_64bits[i % 8] = dataFile[i]; + else{ + B_64bits[i % 8] = padding[count % 8]; + count++; + } + } + //encrypt last block + if(B_64bits.length == 8){ + B_64bits = elaborate64bits(B_64bits,desKey0, true); + B_64bits = elaborate64bits(B_64bits,desKey1, false); + B_64bits = elaborate64bits(B_64bits,desKey2, true); + + System.arraycopy(B_64bits, 0, cipherFile, i - 8, B_64bits.length); + } + + new UtilFile().write(cipherFile,pathFile); + } else { + int i; + byte[] plainFile = new byte[dataFile.length]; + + for (i = 0; i < dataFile.length; i++) { + if (i > 0 && i % 8 == 0) { + B_64bits = elaborate64bits(B_64bits,desKey2, false); + B_64bits = elaborate64bits(B_64bits,desKey1, true); + B_64bits = elaborate64bits(B_64bits,desKey0, false); + + System.arraycopy(B_64bits, 0, plainFile, i - 8, B_64bits.length); + } + if (i < dataFile.length) + B_64bits[i % 8] = dataFile[i]; + } + B_64bits = elaborate64bits(B_64bits,desKey2, false); + B_64bits = elaborate64bits(B_64bits,desKey1, true); + B_64bits = elaborate64bits(B_64bits,desKey0, false); + + System.arraycopy(B_64bits, 0, plainFile, i - 8, B_64bits.length); + + //remove padding + int count = 0; + i = plainFile.length - 1; + while (plainFile[i] ==(byte) 0x0f) { + count++; + i--; + } + + byte[] tmp = new byte[plainFile.length - count - 1]; + System.arraycopy(plainFile, 0, tmp, 0, tmp.length); + + + new UtilFile().write(tmp,pathFile); + } + } + + private static byte[] elaborate64bits(byte[] array,byte[][] key, boolean encode) { + byte[] tmp = new byte[array.length]; + byte[] first32bits = new byte[array.length / 2]; + byte[] second32bits = new byte[array.length / 2]; + + tmp = P_Func(array, Table_IP); + + second32bits = Get_Bits(tmp, 0, Table_IP.length/2); + first32bits = Get_Bits(tmp, Table_IP.length/2, Table_IP.length/2); + + for (int i = 0; i < 16; i++) { + byte[] tmpR = first32bits; + if(encode) + first32bits = F_Func(first32bits, key[15-i]); + else + first32bits = F_Func(first32bits, key[i]); + + first32bits = XOR_Func(second32bits, first32bits); + second32bits = tmpR; + } + + tmp = Bond_Bits(first32bits, Table_IP.length/2, second32bits, Table_IP.length/2); + + tmp = P_Func(tmp, Table_FP); + return tmp; + } + + private static byte[] F_Func(byte[] a, byte[] b) { + byte[] tmp; + tmp = P_Func(a, Table_Expand); + tmp = XOR_Func(tmp, b); + tmp = S_Func(tmp); + tmp = P_Func(tmp, Table_P); + return tmp; + } + + private static byte[] S_Func(byte[] array) { + array = Sunder_Bytes(array, 6); + byte[] out = new byte[array.length / 2]; + int halfByte = 0; + for (int b = 0; b < array.length; b++) { + byte valByte = array[b]; + int r = 2 * (valByte >> 7 & 0x0001) + (valByte >> 2 & 0x0001); + int c = valByte >> 3 & 0x000F; + int val = Table_SBox[b][r][c]; + if (b % 2 == 0) + halfByte = val; + else + out[b / 2] = (byte) (16 * halfByte + val); + } + return out; + } + + + + // util bit + /////////// + private static byte[] P_Func(byte[] input, int[] table) { + int nrBytes = (table.length - 1) / 8 + 1; + byte[] out = new byte[nrBytes]; + for (int i = 0; i < table.length; i++) { + int val = Get_Bit(input, table[i] - 1); + Set_Bit(out, i, val); + } + return out; + } + + private static byte[] Get_Bits(byte[] input, int pos, int n) { + int num = (n - 1) / 8 + 1; + byte[] out = new byte[num]; + for (int i = 0; i < n; i++) { + int val = Get_Bit(input, pos + i); + Set_Bit(out, i, val); + } + return out; + } + + private static void Set_Bit(byte[] data, int pos, int val) { + int posB = pos / 8; + int posb = pos % 8; + byte tmpB = data[posB]; + tmpB = (byte) (((0xFF7F >> posb) & tmpB) & 0x00FF); + byte newByte = (byte) ((val << (8 - (posb + 1))) | tmpB); + data[posB] = newByte; + } + + private static int Get_Bit(byte[] data, int pos) { + int posB = pos / 8; + int posb = pos % 8; + byte tmpB = data[posB]; + int bit = tmpB >> (8 - (posb + 1)) & 0x0001; + return bit; + } + + private static byte[] LR_Bits(byte[] input, int len, int pas) { + int num = (len - 1) / 8 + 1; + byte[] out = new byte[num]; + for (int i = 0; i < len; i++) { + int val = Get_Bit(input, (i + pas) % len); + Set_Bit(out, i, val); + } + return out; + } + + private static byte[] Bond_Bits(byte[] a, int aLen, byte[] b, int bLen) { + int num = (aLen + bLen - 1) / 8 + 1; + byte[] out = new byte[num]; + int j = 0; + for (int i = 0; i < aLen; i++) { + int val = Get_Bit(a, i); + Set_Bit(out, j, val); + j++; + } + for (int i = 0; i < bLen; i++) { + int val = Get_Bit(b, i); + Set_Bit(out, j, val); + j++; + } + return out; + } + + private static byte[] Sunder_Bytes(byte[] array, int len) { + int num = (8 * array.length - 1) / len + 1; + byte[] out = new byte[num]; + for (int i = 0; i < num; i++) { + for (int j = 0; j < len; j++) { + int val = Get_Bit(array, len * i + j); + Set_Bit(out, 8 * i + j, val); + } + } + return out; + } + + private static byte[] XOR_Func(byte[] a, byte[] b) { + byte[] out = new byte[a.length]; + for (int i = 0; i < a.length; i++) { + out[i] = (byte) (a[i] ^ b[i]); + } + return out; + } +} diff --git a/src/EncryptDecrypt/UtilFile.java b/src/EncryptDecrypt/UtilFile.java new file mode 100644 index 0000000..9beb19d --- /dev/null +++ b/src/EncryptDecrypt/UtilFile.java @@ -0,0 +1,53 @@ +package encryptdecrypt; + +import java.io.*; +import java.net.*; + +public class UtilFile{ + + public byte[] read(String aInputFileName){ + File file = new File(aInputFileName); + byte[] result = new byte[(int)file.length()]; + try { + InputStream input = null; + try { + int totalBytesRead = 0; + input = new BufferedInputStream(new FileInputStream(file)); + while(totalBytesRead < result.length){ + int bytesRemaining = result.length - totalBytesRead; + //input.read() returns -1, 0, or more : + int bytesRead = input.read(result, totalBytesRead, bytesRemaining); + if (bytesRead > 0){ + totalBytesRead = totalBytesRead + bytesRead; + } + } + } + finally { + input.close(); + } + } + catch (FileNotFoundException ex) { + } + catch (IOException ex) { + } + return result; + } + + + public void write(byte[] aInput, String aOutputFileName){ + try { + OutputStream output = null; + try { + output = new BufferedOutputStream(new FileOutputStream(aOutputFileName)); + output.write(aInput); + } + finally { + output.close(); + } + } + catch(FileNotFoundException ex){ + } + catch(IOException ex){ + } + } +}