Vigenère cipher: Difference between revisions

Content added Content deleted
(Refactored code)
Line 1,244: Line 1,244:


=={{header|Julia}}==
=={{header|Julia}}==
{{works with|Julia|0.6}}
<lang Julia>function encrypt(msg::ASCIIString, key::ASCIIString)
<lang Julia>function encrypt(msg::AbstractString, key::AbstractString)
msg = uppercase(join(filter(isalpha, collect(msg))))
len = length(msg)
msg = uppercase(join(filter(isalpha, collect(msg))))
key = uppercase(join(filter(isalpha, collect(key))))
key = uppercase(join(filter(isalpha, collect(key))))
msglen = length(msg)
keylen = length(key)


if length(key) < len
if keylen < msglen
key = (key^(div(len - length(key), length(key)) + 2))[1:len]
key = repeat(key, div(msglen - keylen, keylen) + 2)[1:msglen]
end
end


enc = Array(Char, len)
enc = Vector{Char}(msglen)

for i=1:length(msg)
@inbounds for i in 1:length(msg)
enc[i] = Char((Int(msg[i]) + Int(key[i]) - 130) % 26 + 65)
enc[i] = Char((Int(msg[i]) + Int(key[i]) - 130) % 26 + 65)
end
end

join(enc)
return join(enc)
end
end


function decrypt(enc::ASCIIString, key::ASCIIString)
function decrypt(enc::AbstractString, key::AbstractString)
enc = uppercase(join(filter(isalpha, collect(enc))))
enc = uppercase(join(filter(isalpha, collect(enc))))
key = uppercase(join(filter(isalpha, collect(key))))
len = length(enc)
msglen = length(enc)
key = uppercase(join(filter(isalpha, collect(key))))
keylen = length(key)


if length(key) < len
if keylen < msglen
key = (key^(div(len - length(key), length(key)) + 2))[1:len]
key = repeat(key, div(msglen - keylen, keylen) + 2)[1:msglen]
end
end


msg = Array(Char, len)
msg = Vector{Char}(msglen)


for i=1:length(enc)
@inbounds for i in 1:length(enc)
msg[i] = Char((Int(enc[i]) - Int(key[i]) + 26) % 26 + 65)
msg[i] = Char((Int(enc[i]) - Int(key[i]) + 26) % 26 + 65)
end
end


join(msg)
return join(msg)
end
end


const msg = "Attack at dawn."
const messages = ("Attack at dawn.", "Don't attack.", "The war is over.")
const key = "LEMON"
const key = "LEMON"


for msg in messages
println(encrypt(msg, key))
println(decrypt(encrypt(msg, key), key))</lang>
enc = encrypt(msg, key)
dec = decrypt(enc, key)
println("Original: $msg\n -> encrypted: $enc\n -> decrypted: $dec")
end</lang>


{{out}}
{{out}}


<pre>Original: Attack at dawn.
<pre>LXFOPVEFRNHR
-> 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}}==
=={{header|Kotlin}}==