Algoritmos para Encriptamiento y Desencritar en Diferentes Lenguajes
(Lenguaje Java, Perl y C#)
Lourdes Snchez-Guerrero 1 , Jos Raymundo Lira-Corts 2 y Mariem Henaine-Aed 1 1 !ni"ersidad Aut#noma Metro$o%itana, &e$artamento de Sistemas A"' San (a%o )o' 1*+, Co%' Reynosa-,amau%i$as, &e%' Azca$otza%co, C'(' +22++, &' -', M.ico /%s0,ham12correo'azc'uam'm. 2 !ni"ersidad Aut#noma Metro$o%itana, &e$artamento de 3%ectr#nica A"' San (a%o )o' 1*+, Co%' Reynosa-,amau%i$as, &e%' Azca$otza%co, C'(' +22++, &' -', M.ico r%ira2correo'azc'uam'm. Resumen 3ste art4cu%o tiene %a intenci#n de mostrar %a a$%icaci#n de %os a%0oritmos, $ara encri$tar y desencri$tar archi"os' 3stos a%0oritmos &3S y 5&3S 6,R7(L3&3S8, se desarro%%aron en %en0ua9e Ja"a,en $er% y C: ' 3% si0uiente traa9o es $arte de% $royecto de in"esti0aci#n algoritmo de autenticacin, encriptamiento y non-repudation (no- rechazo) para redes de computadora' !ntro"ucci#n A continuaci#n $ara introducir a% tema de %a se0uridad, descriiremos %os conce$tos ms im$ortantes a continuaci#n' 3s im$ortante mencionar ;ue %a se0uridad de %os datos es un tema de actua%idad en cua%;uiera de %as acti"idades desarro%%ados con tecno%o04as de %a in<ormaci#n, es $or esta raz#n ;ue este tema se "ue%"e re%e"ante dentro de rea de conocimiento de %as tecno%o04as de %a in<ormaci#n' Cae mencionar ;ue e.iste %a necesidad de <ormar $ro<esiona%es en esta rea' Cri$to0ra<4a es %a ciencia de %a escritura secreta, es un razo de %as matemticas, %a cri$to%o04a, tiene otro hi9o, ;ue es e% cri$toan%isis y esta es %a ciencia ;ue ana%iza %a cri$to0ra<4a' Las acciones $rinci$a%es de se0uridad en %as a$%icaciones estn diri0idas $or %a cri$to0ra<4a' (rinci$a%mente, %as a$%icaciones necesitan ase0urarse ;ue %os usuarios son ;uienes dicen ser' (ro"eer identi<icaci#n es %%amado autenticaci#n 6autenti<icaci#n8' 3n e% mundo, una %icencia de mane9o es un ti$o de autenticaci#n' Cuando se usa %a com$utadora, usua%mente se necesita un nomre y un $ass=ord 6c%a"e8 $ara autenti<icarse' La cri$to%o04a $ro"ee mtodos ms se0uros, %%amados <irmas y certi<icados' A$%icaciones de com$utadoras necesitan $rote0er sus datos de accesos no autorizados' )o se ;uiere $ersonas oser"ando tus datos 6tu ;uieres con<iai%idad8, y adems no ;uieres ;ue camien datos sin tu autorizaci#n 6;uieres ase0urar %a inte0ridad de tus datos8' &atos 0uardados en un disco, $or e9em$%o, $ueden ser "u%nera%es ser "istos o roados' &atos transmitidos a tra"s de %a red est su9eto a todo ti$o de ata;ues' La cri$to0ra<4a $ro"ee so%uciones' (or e9em$%o> Se0uridad en correo e%ectr#nico' Confia$ili"a" Com?nmente no ;ueremos ;ue otras $ersonas %ean nuestro correo $osta%, es $or esta raz#n usamos sores cerrados $ara nuestras cartas en "ez de %as tar9etas $osta%es' Casi toda %a in<ormaci#n en e% internet es transmitida en e% e;ui"a%ente de tar9etas $osta%es% Aun sin ;uerer e% correo e%ectr#nico es <recuentemente ma% en"iado' Si se tec%ea err#neamente %a direcci#n, tu correo %e $uede %%e0ar a un administrador de sistemas en a%0?n %u0ar' 3s sor$rendentemente es muy senci%%o ;ue in<ormaci#n ;ue tu $ensaas ;ue era con<idencia% est dis$oni%e a mi%es de $ersonas en internet' Aun datos en e% disco duro de tu com$utadora estn dis$oni%es $ara tus com$a@eros de traa9o, # cua%;uiera otra $ersona ;ue ten0a acceso <4sico a tu com$utadora' (ara $rote0er %os datos de% disco duro, es $osi%e encri$tar%os antes de escriir%os en e% disco' A desencri$tar e% te.to ci<rado cuando se ;uiera "er %a in<ormaci#n 6# cuando re;uieras im$rimir%os e% archi"o8' Como e9em$%o de un ci<rador $odemos ha%ar de% RB,15' 3% RB,15'es un ci<rador muy sim$%e' 3% a%0oritmo de% RB,15 sim$%emente rota cada carcter de un mensa9e 15 $osiciones' RB,15 ori0ina%mente se desarro%%o $ara ocu%tar $osi%es romas 6chistes8 o<ensi"os en %os ne=s 0ru$s en internet' Si %a in<ormaci#n era "ista $or otra $ersona no %o entender4a' (ara re"isar %a in<ormaci#n es necesario desencri$tar%a' 3% RB,15 no es se0uro' Los ci<radores ?ti%es usan %%a"es $ara encri$tar y desencri$tar datos' !na %%a"e es un "a%or secretosC como un $ass=ord # un )7( 6n?mero de identi<icador $ersona%8' La %%a"e es una secuencia de ytes' (uede ser 0uardado en %a memoria # en e% disco' S4 se encri$ta e% mismo te.to en c%aro usando di<erentes %%a"es, se otinen di<erentes te.tos ci<rados' &e %a misma <orma, e% te.to ci<rado $uede ser so%amente desencri$tado usando %a %%a"e a$ro$iada' La Cri$to0ra<4a ha sido usada $or %os mi%itares desde %os d4as de %as 0uerras He%nicas y ha crecido <irmemente en %a so<isticaci#n en $ara%e%o con %as Matemticas y ,ecno%o04as de 7n<ormaci#n' ,odos %os sistemas cri$to0r<icos, sin im$ortar cun com$%e9os son tienen %as si0uientes cuatro $artes sicas' 1' (%ainte. 6te.to en c%aro8'- 3ste es e% mensa9e antes de ;ue se ha0a cua%;uier cosa, 3ste es e%e0i%e $ara %os humanos o en un <ormato ;ue cua%;uier so<t=are adecuado $ueda usar' 2' ,e.to Ci<rado'- 3ste es e% mensa9e en $%ainte.t des$us de ;ue ha sido modi<icado $ara hacer%o i%e0i%e' 3% $roceso de con"ertir te.to en c%aro a te.to ci<rado se dice encri$tar y %a o$eraci#n in"ersa es desencri$tar' 5' A%0oritmo de encri$ci#n'- 3sta es %a o$eraci#n usada $ara con"ertir te.to en c%aro a te.to ci<rado y "ice"ersa' D' L%a"e'- 3sta es una %%a"e secreta usada $ara encri$tar o desencri$tar e% mensa9e' Cada %%a"e trans<orma e% mismo te.to en c%aro en di<erente te.to ci<rado' Si e% sistema cri$to0r<ico <unciona ien, so%amente %as $ersonas ;ue conocen %a %%a"e correcta $ueden desci<rar e% te.to ci<rado Cifradores Simtricos: un ci<rador simtrico usa %a misma %%a"e a% encri$tar y desencri$tar' Los ci<radores simtricos tamin son %%amados ci<radores de %%a"e $ri"ada o %%a"e secreta' Cifradores Asimtricos: %os ci<radores asimtricos 6tamin %%amados ci<radores de %%a"es $?%icas8 in"o%ucran una %%a"e $?%ica, ;ue $uede ser %iremente distriuida, y una %%a"e $ri"ada, ;ue $uede ser secreta' 3stas %%a"es siem$re son 0eneradas en $are9as' L%a"es $?%icas rea%mente son $?%icas, se $uede $u%icar%as en un $eri#dico, $ero nadie $uede "io%ar t? $ri"acidad sin %a %%a"e $ri"ada' 3% mecanismo de distriuir %as %%a"es $?%icas, sin emar0o, es un 0ran reto' Los datos encri$tados usando %a %%a"e $?%ica $ueden ser desencri$tados usando %a %%a"e $ri"ada' )in0una otra %%a"e $uede desencri$tar %os datos, y %a %%a"e $ri"ada so%o $uede desencri$tar %os datos ;ue <ueron encri$tados con su $are9a 6%a %%a"e $?%ica8' 3n a%0unos a%0oritmos e% $roceso in"erso tamin <unciona, %os datos encri$tados con %a %%a"e $ri"ada $ueden ser encri$tados con %a %%a"e $?%ica' Los ci<radores asimtricos son mucho ms %entos ;ue %os ci<radores simtricos, y $or eso no son usua%mente usados $ara encri$tar mensa9es muy %ar0os' !ntegri"a" La inte0ridad de datos nos $ermite estar se0uros de ;ue %os datos no han sido camiados 6$or e9em$%o, ;ue nadie ha camiado e% contenido de un e-mai% o camiado un $ro0rama ;ue deseamos a9ar de %a red y ;ue no %o camien $or un $ro0rama con a%0?n ti$o de "irus8 !n message digest $uede ser usado $ara "eri<icar %a inte0ridad de datos' !n message digest es un n?mero ca%cu%ado $or un con9unto de datos de entrada 6$or e9em$%o, un archi"o8' !n C&D!'( DE A)*E+*!CAC!&+ DE ,E+-AJE 6MAC o Messa0e Authentication Code8, $or e9em$%o, es sicamente un M con una %%a"e asociada' (roduce un "a%or corto asado en tanto en su entrada como en su %%a"e' 3n teor4a, so%o con %a misma %%a"e se $uede $roducir e% mismo MAC $ara %a misma entrada de datos' !na <orma de autenticaci#n "iene de %a cominaci#n de M y un ci<rador asimtrico' Si se encri$ta e% M con su %%a"e $ri"ada, otra $ersona tiene ;ue usar %a %%a"e $?%ica de %a $rimera $ara desencri$tar e% M, y as4 no so%o saer ;ue %os datos son 4nte0ros, sino adems, saer ;uin es e% ;ue est en"iando %os datos' 3% M encri$tado es %%amado una firma, de hecho %a $rimera $ersona a firma"o e% archi"o' Autenticaci#n 3n un momento dado, es <undamenta% estar se0uro de ;ue %as $ersonas con %as ;ue tratas son rea%mente ;uienes e%%as dicen ser' 3ste $roceso de identi<icaci#n se %%ama autenticacin! 3n una %%amada te%e<#nica, te identi<icas diciendo tu nomre' 3% sonido de tu "oz te autenti<ica con %a $ersona con %a ;ue ests ha%ando' Cuando se usa un ca9ero automtico, tu tar9eta ma0ntica y tu )7( 6n?mero de identi<icaci#n $ersona%8 te autentican con e% anco, a%0una otra $ersona $odr4a usar tu tar9eta ma0ntica $ero sin tu )7( $resumi%emente no $odr4a otener %os ser"icios ancarios' La mayor4a de %os sistemas de c#m$uto usan un identi<icador de usuario y un pass"ord $ara %a identi<icaci#n y autenticaci#n' ,e identi<icas con e% identi<icador de usuario y te autenticas con tu pass"ord! !n ci<rador asimtrico $uede ser usado $ara %a autenticaci#n' !na $ersona $uede autenticar a otra $idindo%e ;ue encri$te cua%;uier cosa con su %%a"e $ri"ada, $ues so%o su %%a"e $?%ica $odr desencri$tar%o correctamente' Los ci<radores asimtricos son muy costosos com$utaciona%mente 6muy %entos8' &esa<ortunadamente, no es $rctico usar %os ci<radores asimtricos $ara con"ersaciones enteras' ,4$icamente, %os ci<radores asimtricos se usan $ara autenticar a %os $artici$antes de una con"ersaci#n, %a con"ersaci#n se encri$ta usando a%0?n ci<rador simtrico, usando una %%a"e secreta ;ue se 0enera so%o $ara esa con"ersaci#n, %%amada, lla#e de sesin! A;u4 e% reto es intercamiar %a lla#e de sesin sin ;ue nadie %a descura' 3% -ecure -oc.et Layer (--L) hace e.actamente eso 6e% SSL es am$%iamente usado en ERBFS3RS de FFF8' Certificados: un certi<icado es una dec%araci#n, un certi<icado, es una %%a"e $?%ica <irmada' 3% certi<icado se crea con a%0unos datos de% autor de% certi<icado y otros datos de% escritor de %a %%a"e $?%ica y %a %%a"e $?%ica en un archi"o, des$us %a $rimera $ersona <irma e% archi"o 6encri$tando%o con su %%a"e $?%ica8' Cadenas de Certificados: $ara "eri<icar un certi<icado, se necesita una %%a"e $?%ica' (ara "eri<icar una %%a"e $?%ica, es necesario un certi<icado' !n certi<icado $uede "eri<icar a otro, ;ue es "eri<icado $or otro, y as4' 3sto es %%amado una cadena de certi<icados' La cadena no $uede ser in<inita, as4 ;ue %a cadena em$ieza con un certi<icado cuya $ersona ;ue certi<ica y e% ;ue %o 0enero es e% mismo' !sua%mente este certi<icado es 0enerado $or una Autoridad de Certificacin (CA), una instituci#n como GeriSi0n' !sar certi<icados $ara %a autenticaci#n de$ende de %a cadena de certi<icados ;ue a% <ina% termina con un certi<icado ;ue est <irmado $or %a misma $ersona ;ue 0nero e% certi<icado' Los certi<icados <irmados $or %a misma $ersona no son se0uros, cua%;uier $ersona $uede 0enerar su $ro$io certi<icado diciendo ;ue % es GeriSi0n o a%0?n otro' HC#mo se $odr4a con<iar en un certi<icado <irmado $or e% mismoI !na <orma <ci% de hacer esto es 0enerar un M de% certi<icado, usua%mente %%amado hue%%a dacti%ares de% certi<icado 6certi<icate fingerprint)' (ara "eri<icar%o, %%amas a% autor de% certi<icado y "eri<icas e% M de% certi<icado' (or %o 0enera% %a CA $u%ica en di<erentes %u0ares sus M de sus $ro$ios certi<icados $ara ;ue se $uedan "eri<icar sus certi<icados' *ipos "e Algoritmos ALGBR7,MB M& 6 Mensa0e &i0est8 "eri<ica %a inte0ridad de datos MAC 6Messa0e Authentication Code8 c#di0o de autenticaci#n de mensa9e -7RMA una <orma de autenticaci#n "iene de %a cominaci#n de M& y un ci<rador Ci<radores Simtricos usa %a misma %%a"e $ara encri$tar y desencri$tar Ci<radores Asimtricos in"o%ucran una %%a"e $?%ica y una $ri"ada 7ntercamio de %%a"es m?%ti$%es $artes en comunicaci#n se $onen de acuerdo sore ;ue %%a"es usar $ara %%e"ar a cao %a comunicaci#n encri$tada Algoritmos +(,/RE *!P( RE0ERE+C!A M&J M& R-C 1521 <t$>KKds'internic'netKr<cKr<c1521't.t SHA-1 M& )7S, -7(S 1*+-1 htt$>KK==='nist'0o"Kit%Kdi"*LMK$usK<i$1*+-1'htm HmacM&J MAC R-C 21+D <t$>KKds'internic'netKr<cKr<c2+1D't.t HmacSHA1 MAC R-C 21+D <t$>KKds'internic'netKr<cKr<c2+1D't.t &SA -irma )7S, -7(S 1*N htt$>KK==='nist'0o"Kit%Kdi"*LMK$usK<i$1*N'htm 3%Gama% -irma O Gase A$$%ied Cry$to0ra$hy, Eruce Scheneier Addison-Fi%ey &3S Ci<rador Simtrico )7S, -7(S DN-2 htt$>KK==='nist'0o"Kit%Kdi"*LMK$usK<i$DN-2'htm &3Sede Ci<rador Simtrico A)S7 PL'1M o 7SB *M52 htt$>KK==='ansi'or0K (E3FithM&Jand &3S Ci<rador Simtrico (QCS:J htt$>KK==='rsa'comKrsa%asK$usK(QCSKhtm%K$Rcs- J'htm% 3%Gama% Ci<rador Asimtrico O Gase A$$%ied Cry$to0ra$hy, Eruce Scheneier Addison-Fi%ey &H 7ntercamio de L%a"es (QCS:5 htt$>KK==='rsa'comKrsa%asK$usK(QCSK$sK$Rcs-5'$s KO Ejemplo "e uso "e JCE 1%2%1 Java Cryptograp3y E4tension 1%2%1 3ste $ro0rama encry$taKdesencry$ta con &3S y 5&3S 6 ,R7(L3&3S 8 Se $uedesn usar %%a"es de * o 2D ytes 6 $ara &3S o 5&3S 8 OK im$ort 9a"a'io'OC im$ort 9a"a'security'OC im$ort 9a"a'security's$ec'OC im$ort 9a"a.'cry$to'OC im$ort 9a"a.'cry$to's$ec'OC im$ort 9a"a.'cry$to'SecretQey-actory'OC $u%ic c%ass td / $u%ic static "oid main6Strin0ST ar0s8 / int i,%ar0oC Strin0 )omreA%0oC KO esta es %a ase $ara %a %%a"e OK yte ST a U / 6yte8 1, 6yte82, 6yte85, 6yte8D, 6yte8J, 6yte8N, 6yte8M, 6yte8*, 6yte8 1, 6yte82, 6yte85, 6yte8D, 6yte8J, 6yte8N, 6yte8M, 6yte8*, 6yte8 1, 6yte82, 6yte85, 6yte8D, 6yte8J, 6yte8N, 6yte8M, 6yte8*, 1C SecretQey Rey U nu%%C oo%ean dirC KO si encri$ta o desencri$ta OK oo%ean a%0oC KO si des o 5des OK i<6 ar0s'%en0th VU D 8/ System'out'$rint%n6 W!so> encri$ta /eXdX3X&1 %%a"e archi"o1 archi"o2W8C KO e > encri$ta con &3S d > desencri$ta con &3S 3 > encri$ta con 5&3S & > desencri$ta con 5&3S OK System'e.it618C 1 i<6 ar0sS+T'e;ua%s6WeW8 YY ar0sS+T'e;ua%s6WdW8 YY ar0sS+T'e;ua%s6W3W8 YY ar0sS+T'e;ua%s6W&W88/ System'out'$rint%n6 W!so> encri$ta /eXdX3X&1 %%a"e archi"o1 archi"o2W8C System'e.it618C 1 KO dinamicamente con<i0uramos a SunJC3 OK Security'add(ro"ider6 ne= com'sun'cry$to'$ro"ider'SunJC368 8C KO dir es true si encri$ta OK dir U ar0sS+T'e;ua%s6WeW8 XX ar0sS+T'e;ua%s6W3W8 C KO a%0o es e% a%0oritmo, si es true U &3S es <%ase U 5&3S OK a%0o U ar0sS+T'e;ua%s6WeW8 XX ar0sS+T'e;ua%s6WdW8 C i<6 a%0o 8 )omreA%0o U W&3SWC e%se )omreA%0o U W&3SedeWC i<6 a%0o 8 %ar0o U *C e%se %ar0o U 2DC i<6 ar0sS1T'%en0th68 Z %ar0o 8 %ar0o U ar0sS1T'%en0th68C <or6iU+CiZ%ar0oCi[[8 aSiT U 6yte8 ar0sS1T'charAt6i8C try / i<6 a%0o 8/ KK &3S &3SQeyS$ec dRs U ne= &3SQeyS$ec6 a 8C SecretQey-actory R< U SecretQey-actory'0et7nstance6)omreA%0o8C Rey U R<'0enerateSecret6dRs8C 1 e%se / KK &3Sede &3SedeQeyS$ec dRs U ne= &3SedeQeyS$ec6 a 8C SecretQey-actory R< U SecretQey-actory'0et7nstance6)omreA%0o8C Rey U R<'0enerateSecret6dRs8C 1 1 catch6 7n"a%idQeyS$ec3.ce$tion ie. 8/ System'out'$rint%n6W )o encontre a W [ )omreA%0o8C System'e.it618C 1 catch6 7n"a%idQey3.ce$tion iR 8/ System'out'$rint%n6WLLAG3 7)GAL7&A, adiosW8C System'e.it618C 1 catch6 )oSuchA%0orithm3.ce$tion e. 8/ System'out'$rint%n6W )o encontre a W [ )omreA%0o8C System'e.it618C 1 Ci$her ci U nu%%C try / i<6 a%0o 8 KK &3S ci U Ci$her'0et7nstance6W&3SK3CEK(QCSJ(addin0W8C e%se KK 5&3S ci U Ci$her'0et7nstance6W&3SedeK3CEK(QCSJ(addin0W8C i<6 dir 8 ci'init6Ci$her'3)CRA(,\MB&3,Rey8C e%se ci'init6Ci$her'&3CRA(,\MB&3,Rey8C 1 catch6 7n"a%idQey3.ce$tion iR 8/ System'out'$rint%n6WLLAG3 7)GAL7&A, adios u$sW8C System'e.it618C 1 catch6 )oSuchA%0orithm3.ce$tion e. 8/ System'out'$rint%n6W )o encontre a W [ )omreA%0o [ WK3CEK(QCSJ(addin0W8C System'e.it618C 1 catch6 )oSuch(addin03.ce$tion e. 8/ System'out'$rint%n6W )o encontre a W [ )omreA%0o [ WK3CEK(QCSJ(addin0W8C System'e.it618C 1 i<6 dir 8 encri$ta6ci,ar0sS2T,ar0sS5T8C e%se desencri$ta6ci,ar0sS2T,ar0sS5T8C 1 $u%ic static "oid encri$ta6Ci$her ci, Strin0 entrada, Strin0 sa%ida8/ try / Eu<<ered7n$utStream % U ne= Eu<<ered7n$utStream 6 ne= -i%e7n$utStream6entrada88C Ci$herBut$utStream esc U ne= Ci$herBut$utStream6 ne= Eu<<eredBut$utStream 6 ne= -i%eBut$utStream6sa%ida88, ci8C int cC =hi%e6 6 c U %'read68 8 VU -1 8 esc'=rite6c8C %'c%ose68C esc'c%ose68C 1 catch6 7B3.ce$tion e.iii8/ System'out'$rint%n6W3rror de %ectura o escrituraW8C System'e.it618C 1 1 $u%ic static "oid desencri$ta6Ci$her ci, Strin0 entrada, Strin0 sa%ida8/ try / Ci$her7n$utStream %e U ne= Ci$her7n$utStream6 ne= Eu<<ered7n$utStream 6 ne= -i%e7n$utStream6entrada88,ci8C Eu<<eredBut$utStream esc U ne= Eu<<eredBut$utStream 6 ne= -i%eBut$utStream6sa%ida88C int cC =hi%e6 6 c U %e'read68 8 VU -1 8 esc'=rite6c8C %e'c%ose68C esc'c%ose68C 1 catch6 7B3.ce$tion e.iii8/ System'out'$rint%n6W3rror de %ectura o escrituraW8C System'e.it618C 1 1 1 :VKusrK%oca%KinK$er% -= : : 3ncri$ta y desencri$ta con &3S y 5&3S 6&3S\3&358 : en $er% : use Cry$t>>CECC use strictC my6]ci$her,]a%0o,]Rey,]arch\entrada,]arch\sa%ida8C my6]uso,]dir,]nomrea%0o,]u<<er,]%8C ]uso U W!so> encri$ta /eXdX3X&1 %%a"e archi"o1 archi"o2^nWC ]a%0o U shi<t 2ARGGC ]Rey U shi<t 2ARGGC ]arch\entrada U shi<t 2ARGGC ]arch\sa%ida U shi<t 2ARGGC i<6 inde.6Wed3&W,]a%0o8 UU -1 XX %en0th6]a%0o8 VU 1 8/ $rint ]usoC e.it 1C 1 : dir es true si encry$ta ]dir U 6 ]a%0o e; _e_ XX ]a%0o e; _3_ 8C : a%0o es e% a%0oritmo, true si es &3S o <a%se si es 5&3S 6 &3S\3&358 ]a%0o U 6 ]a%0o e; _e_ XX ]a%0o e; _d_ 8C : e% nomre de% a%0oritmo ]nomrea%0o U ]a%0o I W&3SW > W&3S\3&35WC ]ci$her U ne= Cry$t>>CEC6]Rey,]nomrea%0o8C o$en63),RA&A,]arch\entrada8 or die W3rror a% arir a ]arch\entradaC]VWC o$en6SAL7&A,W`]arch\sa%idaW8 or die W3rror a% arir a ]arch\sa%idaC]VWC $rint 6 ]dir I _encry$tin0_ > _decry$tin0_ 8C ]ci$her-`start6 ]dir I _encry$tin0_ > _decry$tin0_ 8C =hi%e6 sysread63),RA&A,]u<<er,1+2D8 8/ ]% U ]ci$her-`cry$t6]u<<er8C sys=rite6SAL7&A,]%, %en0th6]%88C 1 ]% U ]ci$her-`<inish68C sys=rite6SAL7&A,]%, %en0th6]%88C c%ose 3),RA&AC c%ose SAL7&AC KOGersi#n de% a%0oritmo &3S y 5&3S6tri$%e&3S8 en %en0ua9e :C OK usin0 System'G%oa%izationC usin0 System'Runtime'7ntero$Ser"icesC names$ace System'Security'Cry$to0ra$hy / :i< )3,\2\+ SComGisi%e 6true8T :endi< $u%ic astract c%ass &3S > SymmetricA%0orithm / $ri"ate const int ReySizeEyte U *C :i< )3,\2\+ $rotected &3S 68 :e%se $u%ic &3S 68 :endi< / QeySizeGa%ue U NDC E%ocRSizeGa%ue U NDC -eedacRSizeGa%ue U *C Le0a%QeySizesGa%ue U ne= QeySizesS1TC Le0a%QeySizesGa%ueS+T U ne= QeySizes6ND, ND, +8C Le0a%E%ocRSizesGa%ue U ne= QeySizesS1TC Le0a%E%ocRSizesGa%ueS+T U ne= QeySizes6ND, ND, +8C 1 $u%ic static ne= &3S Create 68 / return Create 6WSystem'Security'Cry$to0ra$hy'&3SW8C 1 $u%ic static ne= &3S Create 6strin0 a%0o8 / return 6&3S8 Cry$toCon<i0'Create-rom)ame 6a%0o8C 1 interna% static so%o%ectura yteS,T =eaRQeys U / / +.+1, +.+1, +.+1, +.+1, +.+1, +.+1, +.+1, +.+1 1, / +.1-, +.1-, +.1-, +.1-, +.+-, +.+-, +.+-, +.+- 1, / +.31, +.31, +.31, +.31, +.-1, +.-1, +.-1, +.-1 1, / +.--, +.--, +.--, +.--, +.--, +.--, +.--, +.-- 1, 1C interna% static so%o%ectura yteS,T semiFeaRQeys U / / +.++, +.13, +.++, +.13, +.++, +.+3, +.++, +.+3 1, / +.++, +.3+, +.++, +.3+, +.++, +.-+, +.++, +.-+ 1, / +.++, +.-3, +.++, +.-3, +.++, +.-3, +.++, +.-3 1, / +.13, +.++, +.13, +.++, +.+3, +.++, +.+3, +.++ 1, / +.13, +.3+, +.13, +.3+, +.+3, +.-+, +.+3, +.-+ 1, / +.13, +.-3, +.13, +.-3, +.+3, +.-3, +.+3, +.-3 1, / +.3+, +.++, +.3+, +.++, +.-+, +.++, +.-+, +.++ 1, / +.3+, +.13, +.3+, +.13, +.-+, +.+3, +.-+, +.+3 1, / +.3+, +.-3, +.3+, +.-3, +.-+, +.-3, +.-+, +.-3 1, / +.-3, +.++, +.-3, +.++, +.-3, +.++, +.-3, +.++ 1, / +.-3, +.13, +.-3, +.13, +.-3, +.+3, +.-3, +.+3 1, / +.-3, +.3+, +.-3, +.3+, +.-3, +.-+, +.-3, +.-+ 1, 1C $u%ic static oo% 7sFeaRQey 6yteST r0Qey8 / :i< )3,\2\+ i< 6r0Qey UU nu%%8 thro= ne= Cry$to0ra$hic3.ce$tion 6Loca%e'Get,e.t 6W)o hay %%a"eW88C :endi< i< 6r0Qey'Len0th VU ReySizeEyte8 thro= ne= Cry$to0ra$hic3.ce$tion 6Loca%e'Get,e.t 6WLon0itud de %%a"e incorrectaW88C <or 6int iU+C i Z r0Qey'Len0thC i[[8 / s=itch 6r0Qey SiT X +.118 / case +.11> case +.1-> case +.-1> case +.--> reaRC de<au%t> return <a%seC 1 1 <or 6int iU+C i Z 6=eaRQeys'Len0th `` 58C i[[8 / int 9 U +C <or 6C 9 Z r0Qey'Len0thC 9[[8 / i< 66r0Qey S9T a =eaRQeys Si,9T8 ` 18 reaRC 1 i< 69UU*8 return trueC 1 return <a%seC 1 $u%ic static oo% 7sSemiFeaRQey 6yteST r0Qey8 / :i< )3,\2\+ i< 6r0Qey UU nu%%8 thro= ne= Cry$to0ra$hic3.ce$tion 6Loca%e'Get,e.t 6W)o hay %%a"eW88C :endi< i< 6r0Qey'Len0th VU ReySizeEyte8 thro= ne= Cry$to0ra$hic3.ce$tion 6Loca%e'Get,e.t 6WLon0itud de %%a"e incorrectaW88C <or 6int iU+C i Z r0Qey'Len0thC i[[8 / s=itch 6r0Qey SiT X +.118 / case +.11> case +.1-> case +.-1> case +.--> reaRC de<au%t> return <a%seC 1 1 <or 6int iU+C i Z 6semiFeaRQeys'Len0th `` 58C i[[8 / int 9 U +C <or 6C 9 Z r0Qey'Len0thC 9[[8 / i< 66r0Qey S9T a semiFeaRQeys Si,9T8 ` 18 reaRC 1 i< 69UU*8 return trueC 1 return <a%seC 1 $u%ic o"erride yteST Qey / 0et / i< 6QeyGa%ue UU nu%%8 / GenerateQey 68C 1 return 6yteST8 QeyGa%ue'C%one 68C 1 set / i< 6"a%ue UU nu%%8 thro= ne= Ar0ument)u%%3.ce$tion 6WL%a"eW8C i< 6"a%ue'Len0th VU ReySizeEyte8 thro= ne= Ar0ument3.ce$tion 6Loca%e'Get,e.t 6WLon0itud de %%a"e incorrectaW88C i< 67sFeaRQey 6"a%ue88 thro= ne= Cry$to0ra$hic3.ce$tion 6Loca%e'Get,e.t 6WL%a"e d"i%W88C i< 67sSemiFeaRQey 6"a%ue88 thro= ne= Cry$to0ra$hic3.ce$tion 6Loca%e'Get,e.t 6WL%a"e semi d"i%W88C QeyGa%ue U 6yteST8 "a%ue'C%one 68C 1 1 1 1 /i$liograf5a b A$$%ied Cryto0ra$hy, Erunce Schneider, John Fi%ey Y Sons,7nc', 6!SA,1LLD8, 7SE)+-DM- JLMN-2 b Anu<<, 3d, JAGA SourceooR, BcRei%%y Y Associates' 7nc, 6!SA, 1LLJ8, 7SE) +-DM1-1D*JL-* b &anesh, Arman, ,each Aourse%< JAGAScri$t , Samsnet, 6!SA, 1LLN8, 7SE) 1-JMJ21-+M5* b Coo$er,-rederic J' Chris Go00ans, 7m$%ementin0 7nternet Security, )e= Riders (u%ishin0, 6!SA,1LLJ 8, 7SE) 1 JN2+J-DM1-N b &enin0, &orothy, Cry$to0ra$hy and &ata Security, 6!SA 1L*28, Addison Fes%ey, 7SE) +-2+11X +1J+-J