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

ここには 2 つの問題があります。

ユーザープロンプトが表示されないという事実に関して、コードを次のように置き換えます。

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 に答える