Vigenère cipher: Difference between revisions

Refactored code
(Refactored code)
Line 1,244:
 
=={{header|Julia}}==
{{works with|Julia|0.6}}
<lang Julia>function encrypt(msg::ASCIIStringAbstractString, key::ASCIIStringAbstractString)
msg = uppercase(join(filter(isalpha, collect(msg))))
lenmsg = lengthuppercase(join(filter(isalpha, collect(msg))))
key = uppercase(join(filter(isalpha, collect(key))))
lenmsglen = length(encmsg)
keylen = length(key)
 
if length(key)keylen < lenmsglen
key = repeat(key^(, div(lenmsglen - length(key)keylen, length(key)keylen) + 2))[1:lenmsglen]
end
 
enc = Array(Vector{Char, len}(msglen)
 
@inbounds for i= in 1:length(msg)
enc[i] = Char((Int(msg[i]) + Int(key[i]) - 130) % 26 + 65)
end
 
return join(enc)
end
 
function decrypt(enc::ASCIIStringAbstractString, key::ASCIIStringAbstractString)
enc = uppercase(join(filter(isalpha, collect(enc))))
msgkey = uppercase(join(filter(isalpha, collect(msgkey))))
len = length(enc)
msglen = length(enc)
key = uppercase(join(filter(isalpha, collect(key))))
keylen = length(key)
 
if length(key)keylen < lenmsglen
key = repeat(key^(, div(lenmsglen - length(key)keylen, length(key)keylen) + 2))[1:lenmsglen]
end
 
msg = Array(Vector{Char, len}(msglen)
 
@inbounds for i= in 1:length(enc)
msg[i] = Char((Int(enc[i]) - Int(key[i]) + 26) % 26 + 65)
end
 
return join(msg)
end
 
const msgmessages = ("Attack at dawn.", "Don't attack.", "The war is over.")
const key = "LEMON"
 
for msg in messages
println(encrypt(msg, key))
println(decrypt( enc = encrypt(msg, key), key))</lang>
dec = decrypt(enc, key)
println("Original: $msg\n -> encrypted: $enc\n -> decrypted: $dec")
end</lang>
 
{{out}}
 
<pre>Original: Attack at dawn.
<pre -> encrypted: LXFOPVEFRNHR
ATTACKATDAWN</pre>
-> decrypted: ATTACKATDAWN
Original: Don't attack.
-> encrypted: OSZHNEXMQX
-> decrypted: DONTATTACK
Original: The war is over.
-> encrypted: ELQKNCMECIPV
-> decrypted: THEWARISOVER</pre>
 
=={{header|Kotlin}}==
Anonymous user