Imports System.Text.RegularExpressions
Dim keyword, message, output As String
Console.Write("Enter a message that consists of only letters: ")
message = Console.ReadLine()
Loop Until Regex.IsMatch(message, "^[a-zA-Z]+$")
Console.Write("Enter a keyword that consists of only letters: ")
keyword = Console.ReadLine()
Loop Until Regex.IsMatch(keyword, "^[a-zA-Z]+$")
output = VigenerCipher(keyword, message)
Console.WriteLine(output)
Private Function VigenerCipher(ByVal keyword As String, ByVal message As String) As String
If keyword.Length < message.Length Then
Dim counter As Integer = 0
keyword &= keyword(counter)
Loop Until keyword.Length = message.Length
ElseIf keyword.Length > message.Length Then
keyword = keyword.Substring(0, message.Length)
Dim cipheredText As String = String.Empty
Dim letters() As Char = "abcdefghijklmnopqrstuvwxyz".ToCharArray()
Dim keywordIndex, messageIndex As Integer
For x As Integer = 0 To message.Length - 1
keywordIndex = Array.IndexOf(letters, keyword(x))
messageIndex = Array.IndexOf(letters, message(x))
messageIndex += keywordIndex
If messageIndex > 26 Then
messageIndex = messageIndex - 26
cipheredText &= letters(messageIndex)