Ruby Caesar密码字节或字符操作



你好,我正试图在ruby中创建凯撒密码,但我被卡住了。
我能够将字符串分割成单个字符并放入数组中。然后创建一个新的散列并存储char =>字节数。

中,h的值为104。我想改变+ 5的值。如果value是109,我怎么把h变成m?(104*start, 105, 106, 107, 108, 109*end) (h*start, i, j, k, l, *end)

str = "hello world"
str_array = str.chars.to_a
str_hash = Hash.new
str_array.each do |char|
  str_hash[char]= char.bytes
end
print str_hash
{"h"=>[104], "e"=>[101], "l"=>[108], "o"=>[111], " "=>[32], "w"=>[119], "r"=>[114], "d"=>[100]}

你想做的有点过头了。通常情况下,您将首先生成密码,然后在翻译时进行查找。
Ruby在数组上也有一个rotate方法,这正是你需要的。
下面是编码"hello world"

的代码示例
original = ('a'..'z').to_a
codes = original.rotate(5)
cipher = {}
original.each_with_index do |c,i|
  cipher[c] = codes[i]
end
str = "hello world"
encoded_str = []
str.split('').each do |c|
  if cipher.key(c)
    encoded_str << cipher[c]
  else
    encoded_str << c
  end
end
puts encoded_str.join('')

最新更新