0

所以我在运行我的脚本时遇到了一些麻烦。

我的脚本有两个命令:-e用于加密和-d解密。第二个 ARGV 是非对称加密的密钥,它加密/解密的字符串只是静态的,你会'Words and Stuff'在代码中看到它。

当我运行脚本时它只是弹出空白并且命令没有运行,当我尝试运行-eruby encryptor.rb -e sup3rS3cretKey它只是说Invalid command '-e'; type "help" for a list. error in -e. 因此,由于我的声明,它似乎出于某种原因正在运行 openssl,require `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

4

2 回答 2

0

您最初的问题是您需要带有反引号的“openssl”,因此它试图在 shell 中调用它。将反引号交换为正常引号,您将使其超过该行。

于 2019-04-19T21:02:15.843 回答
0

irb 对于这些情况非常方便。只需键入 irb 并require "openssl"在提示符处输入。然后你可以一次测试一行。

这里有几个问题: openssl 周围的反引号正在挂起脚本(尝试单引号或双引号,如上所述)。“Words and Stuff”不是受支持的算法(尝试 AES-128-CBC)。cipher.key 想要一个 16 字节的字符串(我只是将“sup3rS3cretKeyyz”卡在那里)

于 2019-04-19T21:19:23.747 回答