如何通过终端 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" 卡在那里)
所以我在 运行 编写我的脚本时遇到了一些问题。
我的脚本有两个命令:-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" 卡在那里)