首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过终端对Ruby中的字符串进行加密/解密?

如何通过终端对Ruby中的字符串进行加密/解密?
EN

Stack Overflow用户
提问于 2019-04-20 04:33:00
回答 2查看 718关注 0票数 0

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

我的脚本有两个命令:-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是什么呢?

-Script

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-20 05:02:16

你最初的问题是,你需要'openssl‘与backticks,所以它试图在外壳中调用它。把反引号换成正常的引号,你就可以通过这行了。

票数 0
EN

Stack Overflow用户

发布于 2019-04-20 05:19:24

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

这里有几个问题: openssl周围的反引号挂起了脚本(请尝试使用单引号或双引号,如所述)。“单词和内容”不是一个受支持的算法(请尝试AES-128-CBC)。cipher.key需要一个16字节的字符串(我只是在其中插入了"sup3rS3cretKeyyz“)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55767545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档