如何通过终端在Ruby中加密/解密字符串?

时间:2019-04-19 20:33:00

标签: ruby encryption terminal openssl kali-linux

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

我的脚本有两个命令:-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

2 个答案:

答案 0 :(得分:0)

您的最初问题是,您需要使用backticks的'openssl',因此它试图在shell中调用它。交换反引号以获取常规引号,您将使其超过该行。

答案 1 :(得分:0)

irb在这些情况下非常方便。只需输入irb并在提示符下输入require "openssl"。然后您可以一次测试所有内容。

以下是一些问题:    openssl周围的反引号挂起了脚本(请尝试将单引号或双引号引起来)。    不支持“单词和材料”(尝试AES-128-CBC)。    cipher.key需要一个16字节的字符串(我只是在其中插入了“ sup3rS3cretKeyyz”)