rebol [ title: "crypto2" version: 1.0 date: 10/07/2007 author: "Sébastien 'Jedi' Jeudy" email: reboleur@free.fr url: http://reboleur.free.fr ] cle-interne: [ #{6C} #{D7} #{82} #{7C} #{79} #{1C} #{82} #{51} #{C5} #{98} #{F8} #{86} #{20} #{14} #{06} #{FB} #{9D} #{52} #{C9} #{6D} #{BA} #{37} #{60} #{F0} #{29} #{A2} #{7F} #{1D} #{3F} #{E1} #{AC} #{C9} #{FE} #{C0} #{20} #{72} #{BB} #{3F} #{34} #{42} #{74} #{E2} #{89} #{A7} #{AD} #{AB} #{C2} #{A0} #{09} #{A1} #{D8} #{A4} #{65} #{10} #{1A} #{15} #{B6} #{50} #{C1} #{6F} #{63} #{44} #{3C} #{0D} #{5E} #{62} #{F5} #{82} #{BF} #{6E} #{DD} #{A3} #{22} #{C7} #{7D} #{2B} #{80} #{63} #{B6} #{F6} #{C8} #{53} #{1C} #{F0} #{01} #{06} #{EE} #{8D} #{17} #{11} #{B3} #{F1} #{4C} #{A8} #{76} #{B4} #{39} #{AE} #{9C} #{41} #{82} #{6A} #{67} #{DD} #{1B} #{D8} #{09} #{4A} #{34} #{9C} #{67} #{04} #{CA} #{97} #{6A} #{2B} #{C7} #{1A} #{07} #{05} #{DA} #{B4} #{C8} #{1D} #{D2} #{AF} #{1E} #{09} ] cryptage: does [ nom-fichier: ask "Nom du fichier à crypter (*.txt) : " nom-fichier-crypt: ask "Nom du fichier crypté (*.bin) : " nom-fichier-cle: ask "Nom du fichier clé (*.txt) : " fichier: read to-file nom-fichier cle: read to-file nom-fichier-cle print "Cryptage..." fichier-tmp: "" pos-cle: 1 for pos-fichier 1 (length? fichier) 1 [ fichier-tmp: join fichier-tmp fichier/:pos-fichier car-asc: (to-integer to-binary fichier/:pos-fichier) + (to-integer to-binary cle/:pos-cle) if (car-asc > 207) and (car-asc < 224) [ fichier-tmp: join fichier-tmp (to-char car-asc) ] pos-cle: pos-cle + 1 if pos-cle > (length? cle) [ pos-cle: 1 ] ] fichier-tmp2: copy fichier-tmp modulo: to-integer to-binary cle/1 cycles: to-integer ((length? fichier-tmp) / modulo) if cycles < 4 [ cycles: 4 modulo: to-integer ((length? fichier-tmp) / cycles) ] cycle: 1 pos-car: 0 for pos-fichier 1 (length? fichier-tmp) 1 [ if pos-fichier <= (cycles * modulo) [ pos-fichier2: cycle * modulo - pos-car poke fichier-tmp2 pos-fichier2 fichier-tmp/:pos-fichier cycle: cycle + 1 if cycle > cycles [ cycle: 1 pos-car: pos-car + 1 ] ] ] fichier-crypt: "" pos-cle: length? cle pos-cle-interne: 1 for pos-fichier 1 (length? fichier-tmp2) 1 [ car-asc: (to-integer to-binary fichier-tmp2/:pos-fichier) + (to-integer to-binary cle/:pos-cle) if car-asc > 255 [ car-asc: car-asc - 255 ] car-hi: (to-integer ((to-binary to-char car-asc) and #{0F})) * 16 car-lo: (to-integer ((to-binary to-char car-asc) and #{F0})) / 16 car-asc: car-hi + car-lo car-asc: to-integer ((to-binary to-char car-asc) xor cle-interne/:pos-cle-interne) pos-cle-interne: pos-cle-interne + 1 if pos-cle-interne > (length? cle-interne) [ pos-cle-interne: 1 ] fichier-crypt: join fichier-crypt (to-char car-asc) pos-cle: pos-cle - 1 if pos-cle < 1 [ pos-cle: length? cle ] ] write/binary to-file nom-fichier-crypt fichier-crypt ] decryptage: does [ nom-fichier: ask "Nom du fichier à décrypter (*.bin) : " nom-fichier-decrypt: ask "Nom du fichier décrypté (*.txt) : " nom-fichier-cle: ask "Nom du fichier clé (*.txt) : " fichier: read/binary to-file nom-fichier cle: read to-file nom-fichier-cle print "Décryptage..." fichier-tmp: "" pos-cle: length? cle pos-cle-interne: 1 for pos-fichier 1 (length? fichier) 1 [ car-asc: to-integer ((to-binary to-char fichier/:pos-fichier) xor cle-interne/:pos-cle-interne) pos-cle-interne: pos-cle-interne + 1 if pos-cle-interne > (length? cle-interne) [ pos-cle-interne: 1 ] car-hi: (to-integer ((to-binary to-char car-asc) and #{0F})) * 16 car-lo: (to-integer ((to-binary to-char car-asc) and #{F0})) / 16 car-asc: car-hi + car-lo car-asc: car-asc - (to-integer to-binary cle/:pos-cle) if car-asc < 0 [ car-asc: car-asc + 255 ] fichier-tmp: join fichier-tmp (to-char car-asc) pos-cle: pos-cle - 1 if pos-cle < 1 [ pos-cle: length? cle ] ] fichier-tmp2: copy fichier-tmp modulo: to-integer to-binary cle/1 cycles: to-integer ((length? fichier-tmp) / modulo) if cycles < 4 [ cycles: 4 modulo: to-integer ((length? fichier-tmp) / cycles) ] cycle: 1 pos-car: 0 for pos-fichier 1 (length? fichier-tmp) 1 [ if pos-fichier <= (cycles * modulo) [ pos-fichier2: cycle * modulo - pos-car poke fichier-tmp2 pos-fichier fichier-tmp/:pos-fichier2 cycle: cycle + 1 if cycle > cycles [ cycle: 1 pos-car: pos-car + 1 ] ] ] fichier-decrypt: "" for pos-fichier 1 (length? fichier-tmp2) 1 [ car-asc: (to-integer to-binary fichier-tmp2/:pos-fichier) if (car-asc < 208) or (car-asc > 223) [ fichier-decrypt: join fichier-decrypt (to-char car-asc) ] ] write to-file nom-fichier-decrypt fichier-decrypt ] print "CRYPTO2" choix: ask "Cryptage [c] ou Décryptage [d] ? " if any [ (choix = "c") (choix = "C") ] [ cryptage ] if any [ (choix = "d") (choix = "D") ] [ decryptage ] print "Terminé."