我的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\>
答案 0 :(得分:7)
这里有两个问题:
关于您没有收到用户提示的事实,请将代码替换为:
kee = $stdin.gets.chomp
关于错误消息,原因是:
密钥位于64到448位(8到56字节)之间,和 应该作为打包字符串传递
答案 1 :(得分:0)
这是因为您尝试使用加密将字符串转换为整数。
kee = gets.chomp
根据您给出的输入返回一个字符串,这是一个字符串,当您将字符串加密为整数时,将发生错误。
错误消息本身说:
can't convert String into Integer
此外,您使用的gem显然尚未更新以使用Ruby 1.9。
source表示宝石中可能存在其他不兼容性。