【问题标题】:Ruby Encrypt-Decrypt exercise using ARGV使用 ARGV 的 Ruby 加密-解密练习
【发布时间】:2018-04-18 10:21:38
【问题描述】:

我最近开始学习 Ruby,我得到了一个如下所述的作业:

Assignment

到目前为止,这是我的代码,编码工作正常,但解码不工作。 我尝试在谷歌上搜索答案并没有找到答案,很可能我没有足够的经验来理解我找到的一些东西。 我唯一知道的是,在我输入编码输出后,密钥太大,如错误消息所述。

我希望有人可以帮助我了解问题所在。

 #!/usr/bin/ruby

require "openssl"
require "base64"
include Base64

# check if argv is empty or if argv contains more than two values. if so, print error message and exit program
if ARGV.empty? || ARGV.length > 2
  puts "Error: invalid input, please try again."
  exit(2)
end

# check which method need - encrypt (ARGV contains only one value) of decrypt (ARGV contains two values)
if ARGV.length == 1

   # create the cipher for encrypting
  cipher = OpenSSL::Cipher::AES128.new(:CBC)
  cipher.encrypt

  text = ARGV[0].to_s
  key = cipher.random_key
  iv = cipher.random_iv

  # Encrypt the data, print it and exit program
  cipher_text = cipher.update(text) + cipher.final
  puts "\"" + urlsafe_encode64(cipher_text) + "\"  \"" + urlsafe_encode64(key) + "\""
  exit(2)
end

# check which method need - encrypt (ARGV contains only one value) of decrypt (ARGV contains two values)
if ARGV.length == 2                                                   

  # create the cipher decrypt
  decipher = OpenSSL::Cipher::AES128.new(:CBC)
  decipher.decrypt

  decrypt_text = ARGV[0].to_s
  decipher.key = ARGV[1].to_s
  decipher.iv = decipher.random_iv

  # Decrypt the data, print it and exit program
  decrypted_text = decipher.update(decrypt_text) + decipher.final
  puts "\"" + decrypted_text + "\""
  exit(2)
end 

【问题讨论】:

  • 您的代码在我运行时不会引发任何错误,您只需指定一个参数。 ruby yourcode.rb test => "8NuL1fbm5W6s4b4Sk4UJTA==" "T_h31m0QwG53XT7cqF-62w==" 你的问题到底是什么?
  • 请具体一点;告诉我们程序的行为与您的预期有何不同,并包括您可能收到的任何错误消息。知道你用什么命令行运行程序(特别是什么参数)也可能有助于重现问题。
  • 当我编码时它工作正常,但当我解码时我收到关于密钥大小的错误消息。我现在尝试在解密之前找到某种方法来解码 base 64 密钥和文本,但在第 44 行之后我仍然收到错误消息(“update key not set from encode_decode.rb:44in ) 并且我不知道如何引发错误,我对 ruby​​ 还是很陌生,但因为它与 Python 相似,所以我了解基本知识。

标签: ruby encryption openssl base64


【解决方案1】:

我注意到的最明显的问题是,在加密时,您使用 base64 对密文和密钥进行编码,但在解密步骤中您没有将它们解码回文本/二进制数据。

尝试修复它,然后看看它是否有效:)

我注意到的另一件奇怪的事情是iv = cipher.random_iv。我想你的意思类似于下面几行的decipher.iv = decipher.random_iv

为帮助避免此类简单错误,请始终运行 ruby -wc <your_program.rb> 以让 ruby​​ 检查文件的语法。在上述情况下,它会告诉您变量 iv 已声明但从未使用过。 (-c = 仅检查语法;-w = 显示警告和错误)

【讨论】:

  • 我是新手,我在 stackoverflow 中找不到如何解密的解决方案。您是否有任何网站提供有关如何操作的信息?我发现只能使用 base64 加密,非常感谢您的帮助!
  • base64 用于编码,不能用它隐藏数据,它没有加密。程序中的加密是使用 AES 完成的
  • 我做了你所说的关于 -wc 的事情,在这两种情况下(编码和解码)它都写了“语法 OK”我试图解码 base64 代码但仍然得到错误但不同。我将编辑帖子,以便您查看更新
  • 我用什么方法来解码我在key上使用的base64?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
  • 2014-04-30
  • 2018-01-13
  • 2015-03-26
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
相关资源
最近更新 更多