如何通过终端 Ruby 中的 encrypt/decrypt 字符串?

How do I encrypt/decrypt strings in Ruby via Terminal?

所以我在 运行 编写我的脚本时遇到了一些问题。

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

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

您最初的问题是您需要 'openssl' 和 backticks,所以它试图在 shell 中调用它。将反引号换成普通引号,您将超过该行。

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

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