diff --git a/src/main/kotlin/Encryption/VigenereEncryption.kt b/src/main/kotlin/Encryption/VigenereEncryption.kt new file mode 100644 index 0000000..5768646 --- /dev/null +++ b/src/main/kotlin/Encryption/VigenereEncryption.kt @@ -0,0 +1,24 @@ +fun vigenere(text: String, key: String, encrypt: Boolean = true): String { + val t = if (encrypt) text.toUpperCase() else text + val sb = StringBuilder() + var ki = 0 + for (c in t) { + if (c !in 'A'..'Z') continue + val ci = if (encrypt) + (c.toInt() + key[ki].toInt() - 130) % 26 + else + (c.toInt() - key[ki].toInt() + 26) % 26 + sb.append((ci + 65).toChar()) + ki = (ki + 1) % key.length + } + return sb.toString() +} + +fun main(args: Array) { + val key = "LEMON" + val text = "ATTACKATDAWN" + val encoded = vigenere(text, key) + println(encoded) + val decoded = vigenere(encoded, key, false) + println(decoded) +} diff --git a/src/test/kotlin/Encryption/VigEncTest.kt b/src/test/kotlin/Encryption/VigEncTest.kt new file mode 100644 index 0000000..8ef5b04 --- /dev/null +++ b/src/test/kotlin/Encryption/VigEncTest.kt @@ -0,0 +1,29 @@ +import org.junit.Test +import java.util.* + +class VigEncTest { + @Test + fun testWithAttackAtDawnString() { + val secretText = "ATTACKATDAWN" + val key = "LEMON" + val encoded = vigenere(secretText, key) + assert(vigenere(encoded, key, false)==secretText) + + } + @Test + fun testWithIntellIjString() { + val secretText = "INTELLIJJIDEA" + val key = "CIPHER" + val encoded = vigenere(secretText, key) + assert(vigenere(encoded, key, false)==secretText) + + } + @Test + fun testWithAlgorithmjString() { + val secretText = "ALGORITHMREPO" + val key = "LEMON" + val encoded = vigenere(secretText, key) + assert(vigenere(encoded, key, false)==secretText) + + } +}