1

我的 ruby​​ 脚本似乎没有等待我的输入。我正在尝试遵循从本书第一章加密文件的脚本:wicked cool ruby​​,但在我在命令提示符下运行文件后,它不会等待我的输入。

导致问题的代码片段:

require 'crypt/blowfish'

unless ARGV[0]
   puts "Usage: ruby encrypt.rb <filename.ext>"
   puts "Example: ruby encrypt.rb secret.stuff"
   exit
end

#take in the file name to encrypt as an argument
filename = ARGV[0].chomp
puts filename

c = "Encrypted_#{filename}"

if File.exists?(c)
   puts "File already exists."
   exit
end

print 'Enter your encryption key (1-56 bytes): '
kee = gets.chomp

begin
   blowfish = Crypt::Blowfish.new(kee)
   blowfish.encrypt_file(filename.to_str, c)
   puts 'Encryption SUCCESS!'
rescue Exception => e
   puts "An error occurred during encryption: \n #{e}"
end

尝试运行文件后在 cmd 中看到的内容:

C:\Users\me\>ruby new4.rb fileToEnrypt.txt
Enter your encryption key (1-56 bytes): An error occurred during encryption:
 can't convert String into Integer
C:\Users\me\>
4

2 回答 2

7

你在这里有两个问题:

关于您没有得到用户提示的事实,请将您的代码替换为:

kee = $stdin.gets.chomp

关于错误消息,这是因为:

密钥介于 64 和 448 位(8 和 56 字节)之间,应作为打包字符串传递

于 2013-02-07T14:33:25.323 回答
0

这是因为您正在尝试使用加密将字符串转换为整数。

kee = gets.chomp正在根据您提供的输入返回一个字符串,这是一个字符串,并且当您将字符串加密为整数时,将发生错误。

错误消息本身说:

can't convert String into Integer

此外,您使用的 gem 显然还没有更新为与 Ruby 1.9 一起使用。

消息人士称,gem 中可能存在其他不兼容问题。

于 2013-02-07T14:34:17.157 回答