ruby caesar密码字节或字符操作

时间:2015-09-21 04:18:17

标签: ruby caesar-cipher

您好我正在尝试在红宝石中创建一个凯撒密码,但我被卡住了。
我能够将字符串拆分为单个字符并放入数组中。然后做了一个新的哈希并存储了char =>字节数。

在散列中,h的值为104.我想更改值+ 5.如果值为109,我如何将h更改为m? (104 *开始,105,106,107,108,109 *结束)(h *开始,i,j,k,l,*结束)

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]}

1 个答案:

答案 0 :(得分:0)

你要做的是有点矫枉过正。通常情况下,您会先生成密码,然后在翻译时进行查找 Ruby在数组上也有一个旋转方法,它可以完全满足您的需要 请参阅下文,了解编码" 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('')