1. def letterconv(letter)
  2.     larr = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
  3.     narr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]
  4.     i = 0
  5.     while i < larr.length
  6.         if letter == larr[i]
  7.             return narr[i]
  8.         end
  9.         i += 1
  10.     end
  11. end
  12.  
  13. def gen_key_string(key,istr)
  14.     istr = istr.gsub(" ",'')
  15.     key = key.gsub(" ",'')
  16.     istr = istr.upcase
  17.     key = key.upcase
  18.     karr = key.split(//)
  19.     nkarr = []
  20.     p = 0
  21.     while nkarr.length < istr.length
  22.         p = 0
  23.         while p < karr.length
  24.             if nkarr.length == istr.length
  25.                 break
  26.             else
  27.                 nkarr << karr[p]
  28.                 p += 1
  29.             end
  30.         end
  31.     end
  32.     return nkarr
  33. end
  34.  
  35. def strconv(strarr)
  36.     narr = []
  37.     i = 0
  38.     while i < strarr.length
  39.         narr << letterconv(strarr[i])
  40.         i += 1
  41.     end
  42.     return narr
  43. end
  44.  
  45. def stradd(strarr1,strarr2)
  46.     i = 0
  47.     narr = []
  48.     while i < strarr1.length
  49.         narr << strarr1[i] + strarr2[i]
  50.         i += 1
  51.     end
  52.     return narr
  53. end
  54.  
  55. def strsubt(strarr1,strarr2)
  56.     i = 0
  57.     narr = []
  58.     while i < strarr1.length
  59.         narr << strarr1[i].to_i - strarr2[i].to_i
  60.         i += 1
  61.     end
  62.     return narr
  63. end
  64.  
  65. def strshort(strarr)
  66.     i = 0
  67.     narr = []
  68.     while i < strarr.length
  69.         bit = strarr[i]
  70.         if bit > 26
  71.             bit = bit - 26
  72.             narr << bit
  73.         else
  74.             narr << bit
  75.         end
  76.         i += 1
  77.     end
  78.     return narr
  79. end
  80.  
  81. def strshort2(strarr)
  82.     i = 0
  83.     narr = []
  84.     while i < strarr.length
  85.         bit = strarr[i]
  86.         if bit < 0
  87.             narr << 26 + bit
  88.         else
  89.             narr << bit
  90.         end
  91.         i += 1
  92.     end
  93.     return narr
  94. end
  95.  
  96. def numconv(num)
  97.     larr = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
  98.     narr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]
  99.     i = 0
  100.     while i < narr.length
  101.         if num == narr[i]
  102.             return larr[i]
  103.         end
  104.         i += 1
  105.     end
  106. end
  107.  
  108. def strconv2(strarr)
  109.     narr = []
  110.     i = 0
  111.     while i < strarr.length
  112.         narr << numconv(strarr[i])
  113.         i += 1
  114.     end
  115.     return narr
  116. end
  117.  
  118. def encrypt(str,key)
  119.     osstr = str.upcase.gsub(" ","").split(//)
  120.     narr = gen_key_string(key,str)
  121.     nosstr =  strconv(osstr)
  122.     nnarr = strconv(narr)
  123.     narr3 = stradd(nosstr,nnarr)
  124.     narr4 = strshort(narr3)
  125.     narr5 = strconv2(narr4)
  126.     return narr5.join()
  127. end
  128.  
  129. def decrypt(encrypted_string,key)
  130.     variable_arr = encrypted_string.upcase.gsub(" ","").split(//)
  131.     print variable_arr
  132.     puts
  133.     variable_key = gen_key_string(key,encrypted_string)
  134.     variable_arr = strconv(variable_arr)
  135.     variable_key = strconv(variable_key)
  136.     new_number_array = strsubt(variable_arr,variable_key)
  137.     new_number_array = strshort2(new_number_array)
  138.     output_array = strconv2(new_number_array)
  139.     return output_array.join
  140. end
  141.  
  142. ostr = "this is a complex string"
  143.  
  144. key = "hello world"
  145.  
  146. ostr2 = encrypt(ostr,key)
  147. puts decrypt(ostr2,key)