所以我在运行脚本时遇到了一些麻烦。
我的脚本有两个命令:-e
用于加密,-d
用于解密。第二个ARGV是非对称加密的关键,它加密/解密的字符串只是静态的,你会看到代码中的'Words and Stuff'
。
当我运行脚本时它只是弹出空白并且命令没有运行,当我尝试运行-e
例如ruby encryptor.rb -e sup3rS3cretKey
它只是说Invalid command '-e'; type "help" for a list. error in -e
。所以它似乎因为我的require `openssl`
语句而出于某种原因运行openssl并且它不能操作我的命令,因为我的脚本没有从终端运行。那么我该如何解决这个问题呢?它所做的openssl事情是什么?
-脚本
require `openssl`
if ARGV[0] == '-e' #Encrypt
if ARGV.length != 2
puts "Please input a key."
exit
end
puts "Encrypting"
key = ARGV[1]
cipher = OpenSSL::Cipher.new('Words and Stuff').encrypt
cipher.key = Digest::SHA1.hexdigest key
s = cipher.update(self) + cipher.final
s.unpack('H*')[0].upcase
puts "Encrypted"
elsif ARGV[0] == '-d' #Decrypt
if ARGV.length != 2
puts "Please input a key."
exit
end
puts "Decrypting"
key = ARGV[1]
cipher = OpenSSL::Cipher.new('Words and Stuff').decrypt
cipher.key = Digest::SHA1.hexdigest key
s = [self]/pack("H*").unpack("C*").pack("c*")
cipher.update(s) + cipher.final
puts "String decrypted."
end
你最初的问题是你需要使用backticks'openssl',所以它试图在shell中调用它。交换反引号以获得正常报价,然后您将使其超过该线。
irb对于这些情况非常方便。只需输入irb并在提示符下输入require "openssl"
。然后你可以一次测试一条线。
以下是一些问题:openssl周围的反引号挂起了脚本(如上所述,请尝试单引号或双引号)。 “Words and Stuff”不是支持的算法(尝试AES-128-CBC)。 cipher.key需要一个16字节的字符串(我只是在那里卡住“sup3rS3cretKeyyz”)