class Ciphers::Vigenere
Attributes
alphabet[R]
key[R]
Public Class Methods
new(alphabet: Ciphers::LATIN, key: )
click to toggle source
# File lib/ciphers/vigenere.rb, line 3 def initialize(alphabet: Ciphers::LATIN, key: ) alphabet = alphabet.chars if alphabet.is_a? String @alphabet = alphabet.to_a.freeze @key = key.upcase.freeze end
Public Instance Methods
decrypt(string)
click to toggle source
# File lib/ciphers/vigenere.rb, line 21 def decrypt(string) i = 0 string.each_char.with_object('') do |char, ret| ret << char and next unless alphabet.include?(char) key_char = key[ i % key.length ] row = table.fetch key_char col = row.index(char) i += 1 ret << alphabet[col] end end
encrypt(string)
click to toggle source
# File lib/ciphers/vigenere.rb, line 9 def encrypt(string) i = 0 string.each_char.with_object('') do |char, ret| ret << char and next unless alphabet.include?(char) key_char = key[ i % key.length ] row = table.fetch key_char col = alphabet.index(char) i += 1 ret << row[col] end end
Private Instance Methods
table()
click to toggle source
# File lib/ciphers/vigenere.rb, line 37 def table @table = {}.tap do |hash| alphabet.each_with_index {|char, i| hash[char] = alphabet.rotate(i) } end end