def enc_vigenere(clair, key)
cipher = ''
i = 0
clair.each_byte do |letter|
cipher += ((((letter - 'A'.ord) + ((key[i % key.length].ord) - 'A'.ord)) % 26) + 'A'.ord).chr
i += 1
end
return cipher
end
def dec_vigenere(cipher, key)
clair = ''
i = 0
cipher.each_byte do |letter|
clair += ((((letter - 'A'.ord) - ((key[i % key.length].ord) - 'A'.ord)) % 26) + 'A'.ord).chr
i += 1
end
return clair
end
puts 'V1G3N3R3 3NCRYP70R'
puts
puts 'Encrypt or decrypt ? e/d'
c = gets.chomp
puts
if (c == 'e')
puts 'Enter the text to encrypt'
clair = gets.chomp.downcase
puts
puts 'Enter the key'
key = gets.chomp.upcase
puts
nclair = ''
clair.each_byte do |letter|
case letter
when 97..122
nclair += letter.chr.upcase
end
end
puts enc_vigenere(nclair, key)
elsif (c == 'd')
puts 'Enter the text to decrypt'
cipher = gets.chomp.downcase
puts
puts 'Enter the key'
key = gets.chomp.upcase
puts
ncipher = ''
cipher.each_byte do |letter|
case letter
when 97..122
ncipher += letter.chr.upcase
end
end
puts dec_vigenere(ncipher, key)
else
puts 'Unknown command'
end
puts
puts 'Type <SPACE> to continue...'
gets
ZGVmIGVuY192aWdlbmVyZShjbGFpciwga2V5KQogIGNpcGhlciA9ICcnCiAgaSA9IDAKICBjbGFpci5lYWNoX2J5dGUgZG8gfGxldHRlcnwKICAgIGNpcGhlciArPSAoKCgobGV0dGVyIC0gJ0EnLm9yZCkgKyAoKGtleVtpICUga2V5Lmxlbmd0aF0ub3JkKSAtICdBJy5vcmQpKSAlIDI2KSArICdBJy5vcmQpLmNocgogICAgaSArPSAxCiAgZW5kCiAgcmV0dXJuIGNpcGhlcgplbmQKCmRlZiBkZWNfdmlnZW5lcmUoY2lwaGVyLCBrZXkpCiAgY2xhaXIgPSAnJwogIGkgPSAwCiAgY2lwaGVyLmVhY2hfYnl0ZSBkbyB8bGV0dGVyfAogICAgY2xhaXIgKz0gKCgoKGxldHRlciAtICdBJy5vcmQpIC0gKChrZXlbaSAlIGtleS5sZW5ndGhdLm9yZCkgLSAnQScub3JkKSkgJSAyNikgKyAnQScub3JkKS5jaHIKICAgIGkgKz0gMQogIGVuZAogIHJldHVybiBjbGFpcgplbmQKCnB1dHMgJ1YxRzNOM1IzIDNOQ1JZUDcwUicKcHV0cwpwdXRzICdFbmNyeXB0IG9yIGRlY3J5cHQgPyBlL2QnCmMgPSBnZXRzLmNob21wCnB1dHMKaWYgKGMgPT0gJ2UnKQogIHB1dHMgJ0VudGVyIHRoZSB0ZXh0IHRvIGVuY3J5cHQnCiAgY2xhaXIgPSBnZXRzLmNob21wLmRvd25jYXNlCiAgcHV0cwogIHB1dHMgJ0VudGVyIHRoZSBrZXknCiAga2V5ID0gZ2V0cy5jaG9tcC51cGNhc2UKICBwdXRzCiAgbmNsYWlyID0gJycKICBjbGFpci5lYWNoX2J5dGUgZG8gfGxldHRlcnwKICAgIGNhc2UgbGV0dGVyCiAgICAgIHdoZW4gOTcuLjEyMgogICAgICAgIG5jbGFpciArPSBsZXR0ZXIuY2hyLnVwY2FzZQogICAgZW5kCiAgZW5kICAKICBwdXRzIGVuY192aWdlbmVyZShuY2xhaXIsIGtleSkKZWxzaWYgKGMgPT0gJ2QnKQogIHB1dHMgJ0VudGVyIHRoZSB0ZXh0IHRvIGRlY3J5cHQnCiAgY2lwaGVyID0gZ2V0cy5jaG9tcC5kb3duY2FzZQogIHB1dHMKICBwdXRzICdFbnRlciB0aGUga2V5JwogIGtleSA9IGdldHMuY2hvbXAudXBjYXNlCiAgcHV0cwogIG5jaXBoZXIgPSAnJwogIGNpcGhlci5lYWNoX2J5dGUgZG8gfGxldHRlcnwKICAgIGNhc2UgbGV0dGVyCiAgICAgIHdoZW4gOTcuLjEyMgogICAgICAgIG5jaXBoZXIgKz0gbGV0dGVyLmNoci51cGNhc2UKICAgIGVuZAogIGVuZCAgCiAgcHV0cyBkZWNfdmlnZW5lcmUobmNpcGhlciwga2V5KQplbHNlCiAgcHV0cyAnVW5rbm93biBjb21tYW5kJwplbmQKcHV0cwpwdXRzICdUeXBlIDxTUEFDRT4gdG8gY29udGludWUuLi4nCmdldHM=
Ck5JTUdNIElXWVZDIERMTUxaIFhOSEhUIE1DV0ZEIFlXRVhCIFFaTUdCIFdOR1haIFVUR0VSIEdYUVBDIFpBQ01WIEROUk5BIFFDQ0taIFhIRVNXIEdSV1VBIElDVFVRIFpDUUlSIFBVRVZNIE9VWkJLIElSUklXIERNSU1aIFVESVFXIEdTQUhEIFFOV0dNIEVUV05UIExOV0RCIEFVQldWIFdPU1hRIFpFQ0tKIFJYWVZNIEpQTUtaIFFOUldXIFpTSU1GIFlDWkRNIEZOV05KIFRKVldJIFNFV0dKIFdKUlZJIEdUWlhKIFZOV1daIFVDQkJGIFJCVVhNIFhFWlhKIFROR1dWIEFUWlhKIE1DSVVNIEJFWk1GIFZSSVFXIEVUQ01GIFdKVldRIE9MTUxaIFJPU1VVIE1UUVlKIElDRVhCIERFQU1WIEJDSVZCIFFDUEdaIFVESVZXIEdOV0dUIElCWE9NIE9PQlhHIEVBWERPIFFETUdGIFhBSUZXIFlNQ0dSIFlDSVNXIEdSQlRFIFhOWFlXIEdTREhMIFdOUlVNIFpEWlhRIFpSWEhLIEFNWE1WIFJYWVZLIEdMQkJNIFNXV09JIFBJQVZJIElDTVJWIFFUVFRIIFlKUExCIFFMTUlJIE1XR0xYIE1MS0hFIFhOUlhMIFFOV01JIElPU1VDIFlOTUxLIEVMR0hBIEVJSkVWIFVERVhGIFlFVVVJIElCSEhWIEFUWlhUIFNWUVhWIE1VQlhDIEVBRUxBIEFOTUxLIFdSUVNUIFFDTUtLIEVSUlZBIE1WV0JJIFdXSVZXIFpUWFRKIEVZUERLIFFSTUdLIFZOWFJDIEZFQUVWIFdWRUxWIEVRQ0JVIEhOV0RLIFRBWkdWIFdNWVFNIEdUV0laIElNWVNJIERUSVpWIEVVU1VBIFpPQktWIFRYV0xCIFVPVlhKIFhKUUVRIFNVTUdGIFlCSEhEIEFOQUVSIEhWSVdCIERFVkhMIFdZVlJWIEFOQUVWIFRKVldJIFNFTFhKIEdYUlFJIFVTQVRFIEdOV1ZJIFpTWlhKIFhBTUZCIFVPVkxUIElCWE9JIEJJTUtJIElKUkpDIFhBUUtWIEhOUERLIEFNVU5FIEVEWEhVIE1JQUdGIFlCUkhBIEFNVVhKIFRKV0REIFFVT0VWIFdKWVNXIFVOQldWIFROUlZNIERRQ1hLIFNEV1JWIEZMUUdLIElVUExPIFFOS1hGIFlVRVBJIEZVWkJLIElXSUZNIEVTSUJJIElKUFhCIFVMUUxSIFhSU1FSIEdEUVZaIElEV0hMIEdOQVRNIFNSVlRDIFVQSUtVIElPTVFRIEZJV0dWIFdDUkhDIEZSTVlGIFZDSFhLIEFOQU1SIFhaWUhUIE1DV0dFIFNDRVdRIEFOTE5KIEVFU0xaIFBFWFhFIEhKWkRWIEZUV05LIEhOUERVIEFSSUVaIFhOSVdMIFFMSVlJIEVXR0tRIEVFTUdNIElBV09DIFVNTUZWIEhOUFhCIFVMUUxSIFhOWVVWIEFVQUlJIElPSVVXIFpTWlhKIElBWkhaIE9FQVRNIFNSVlNXIEdSS1hMIEJaWUxBIEFOQlRHIFhOV0RUIEdUUUVaIFdOVlNXIEdSVFhTIE1OUkZXIFlNQ0dSIFZLTVdaIE1JWlhUIElBWEhBIFlBUUxSIFpORFlXIEdTVUJWIFlHRVNaIEFQV0xWIFZVSVZJIEhPUUtWIFdDWVFNIE1SVVhSIFlDRVFCIENVTUVWIFdWU1dBIEFVVFRUIE1OVkhCIFpPQ0xFIElCU1BVIFFTWFRKIFlXSURaIFlVWlhJIE1OUERLIEFNVU5FIEVEWEhWIFFTQklSIFdMU1FBIFVETUtWIElZRVVBIFFTVVhEIEZBSVZLIEFNVVhMIFJOUkxNIFlFVEJWIFlNSU9NIFFDUFRLIFNEWFlJIFpPQ0xHIEVBWERPIFFPVkxJIElOUE9NIFlFVk1WIFhXU1daIFFDWlhVIFNXU1daIFFEV1pEIElMSVZCIFBBWElGIFZDSVVLIFFRQ1hFIFNEV1NXIEdWV0dKIEhKUlZUIE1NTUxMIFZOSEhWIEFTVUhQIElXV0hCIFBFVkhMIFdOUEhEIFFST0tSIEdORVhGIE9PVk1JIE1LWVdRIEFOQVdWIFdKWVdaIFFTVVhEIEZBSVZMIEdQSUtLIEVQSVFNIFFMSUlHIFZOUldRIEVTSVpWIElDSEhUIE1QWEtWIFJDTVZBIE1HTUdWIElVSVNJIERUSVpWIFJYWVZWIFFDUFhJIEdRU1FBIEJBQVRKIEVFU0xaIENVUVdWIFBEUkRNIFpHTUdVIFZOUERDIEZSTVhFIFRBSVBRIFFSVkhMIFdXU1hBIE9PVk1WIFJDU1FBIFBFVk1JIElDSVFRIERMSVVGIFlMUEhJIFVOQUJXIFNBUUhNIFFUTFhHIFZYS1VNIEVTTUtWIFJXU1hBIE1JTFRFIFhVSVZDIFpTVFhKIEVEWFVNIEVTUUZHIFBOUUhWIEZMTUZGIFhNSVNJIEVTTVhKIFhFTUpNIFpFWlhUIElCWElJIE9JVFgg
NIMGM IWYVC DLMLZ XNHHT MCWFD YWEXB QZMGB WNGXZ UTGER GXQPC ZACMV DNRNA QCCKZ XHESW GRWUA ICTUQ ZCQIR PUEVM OUZBK IRRIW DMIMZ UDIQW GSAHD QNWGM ETWNT LNWDB AUBWV WOSXQ ZECKJ RXYVM JPMKZ QNRWW ZSIMF YCZDM FNWNJ TJVWI SEWGJ WJRVI GTZXJ VNWWZ UCBBF RBUXM XEZXJ TNGWV ATZXJ MCIUM BEZMF VRIQW ETCMF WJVWQ OLMLZ ROSUU MTQYJ ICEXB DEAMV BCIVB QCPGZ UDIVW GNWGT IBXOM OOBXG EAXDO QDMGF XAIFW YMCGR YCISW GRBTE XNXYW GSDHL WNRUM ZDZXQ ZRXHK AMXMV RXYVK GLBBM SWWOI PIAVI ICMRV QTTTH YJPLB QLMII MWGLX MLKHE XNRXL QNWMI IOSUC YNMLK ELGHA EIJEV UDEXF YEUUI IBHHV ATZXT SVQXV MUBXC EAELA ANMLK WRQST QCMKK ERRVA MVWBI WWIVW ZTXTJ EYPDK QRMGK VNXRC FEAEV WVELV EQCBU HNWDK TAZGV WMYQM GTWIZ IMYSI DTIZV EUSUA ZOBKV TXWLB UOVXJ XJQEQ SUMGF YBHHD ANAER HVIWB DEVHL WYVRV ANAEV TJVWI SELXJ GXRQI USATE GNWVI ZSZXJ XAMFB UOVLT IBXOI BIMKI IJRJC XAQKV HNPDK AMUNE EDXHU MIAGF YBRHA AMUXJ TJWDD QUOEV WJYSW UNBWV TNRVM DQCXK SDWRV FLQGK IUPLO QNKXF YUEPI FUZBK IWIFM ESIBI IJPXB ULQLR XRSQR GDQVZ IDWHL GNATM SRVTC UPIKU IOMQQ FIWGV WCRHC FRMYF VCHXK ANAMR XZYHT MCWGE SCEWQ ANLNJ EESLZ PEXXE HJZDV FTWNK HNPDU ARIEZ XNIWL QLIYI EWGKQ EEMGM IAWOC UMMFV HNPXB ULQLR XNYUV AUAII IOIUW ZSZXJ IAZHZ OEATM SRVSW GRKXL BZYLA ANBTG XNWDT GTQEZ WNVSW GRTXS MNRFW YMCGR VKMWZ MIZXT IAXHA YAQLR ZNDYW GSUBV YGESZ APWLV VUIVI HOQKV WCYQM MRUXR YCEQB CUMEV WVSWA AUTTT MNVHB ZOCLE IBSPU QSXTJ YWIDZ YUZXI MNPDK AMUNE EDXHV QSBIR WLSQA UDMKV IYEUA QSUXD FAIVK AMUXL RNRLM YETBV YMIOM QCPTK SDXYI ZOCLG EAXDO QOVLI INPOM YEVMV XWSWZ QCZXU SWSWZ QDWZD ILIVB PAXIF VCIUK QQCXE SDWSW GVWGJ HJRVT MMMLL VNHHV ASUHP IWWHB PEVHL WNPHD QROKR GNEXF OOVMI MKYWQ ANAWV WJYWZ QSUXD FAIVL GPIKK EPIQM QLIIG VNRWQ ESIZV ICHHT MPXKV RCMVA MGMGV IUISI DTIZV RXYVV QCPXI GQSQA BAATJ EESLZ CUQWV PDRDM ZGMGU VNPDC FRMXE TAIPQ QRVHL WWSXA OOVMV RCSQA PEVMI ICIQQ DLIUF YLPHI UNABW SAQHM QTLXG VXKUM ESMKV RWSXA MILTE XUIVC ZSTXJ EDXUM ESQFG PNQHV FLMFF XMISI ESMXJ XEMJM ZEZXT IBXII OITX