【问题标题】:How do I encrypt/decrypt strings in Ruby via Terminal?如何通过终端加密/解密 Ruby 中的字符串?
【发布时间】:2019-09-10 01:28:07
【问题描述】:

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

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

【问题讨论】:

  • 您很快就选择了答案。我想这意味着您对其他答案不感兴趣。对吗?
  • 是的。这有什么意义?
  • 快速选择可能会阻止其他答案。大多数成员在做出选择之前至少要等待几个小时。那么,为什么要匆忙,除非您得出结论认为您的问题没有什么更值得说的了?

标签: ruby encryption terminal openssl kali-linux


【解决方案1】:

您最初的问题是您需要带有 backticks 的“openssl”,因此它试图在 shell 中调用它。将反引号换成普通引号,您将超过该行。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 是的,当代码可以编译时,我发现 AES-128-CBC 是算法密钥:/,但无论如何感谢您的帮助 ;)
    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多