首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby OpenSSL非对称加密-使用两个密钥对

Ruby OpenSSL非对称加密-使用两个密钥对
EN

Stack Overflow用户
提问于 2012-09-30 16:29:09
回答 2查看 5.1K关注 0票数 6

我想使用两个密钥对来实现两个通信系统之间不可否认的安全消息传递。我使用以下方法生成和存储了两组密钥对:

代码语言:javascript
复制
sys1_key = OpenSSL::PKey::RSA.generate( 2048 )
sys2_key = OpenSSL::PKey::RSA.generate( 2048 )

这两个密钥对都将各自的公钥和私钥保存到文件中:

  • sys1.pub.pem
  • sys1.priv.pem
  • sys2.pub.pem
  • sys2.priv.pem

系统1有自己的公钥和私钥以及系统2的公钥。系统2有自己的公钥和私钥以及系统1的公钥。

在系统1上,我想使用系统1的私钥和系统2的公钥对其进行加密。此消息只能由系统2使用自己的私钥和系统1的公钥解密。

我们目前使用GPG实现了类似的过程,但是我想自动化这个过程--任何帮助都可以。我们在Ruby1.9.2上。

EN

回答 2

Stack Overflow用户

发布于 2012-10-01 14:49:50

私钥用于解密,公钥用于加密。

因此,如果系统1打算向系统2发送加密文本。

系统1应掌握系统2的公钥,并使用系统2的公钥对文本进行加密。系统2可以接收文本并使用自己的私钥解密。在发送端,您可以使用这样的代码。

代码语言:javascript
复制
#!/usr/bin/env ruby

require 'openssl'
require 'base64'

public_key_file = 'server2_public.pem';
string = 'Secret!';

public_key =
OpenSSL::PKey::RSA.new(File.read(public_key_file))
encrypted_string = Base64.encode64(public_key.public_encrypt(string))
print encrypted_string, "\n"

Base 64编码只是一个可选的步骤,这取决于您是否希望通过线路发送二进制数据等等。

在接收方

代码语言:javascript
复制
#!/usr/bin/env ruby

require 'openssl'
require 'base64'

key = 'my_private_key.pem';

private_key = OpenSSL::PKey::RSA.new(File.read(key),'password')
data = private_key.private_decrypt(Base64.decode64(encrypted_data_received))

puts data

如果您有n个系统,您应该使用约定来查找公钥名称。例如,公钥名称可以与消息的目标机器名称相同,并且可以从密钥服务器上查找。私钥只应出现在相应的系统上。

非对称加密的目的是双重的。

1)如果使用公钥加密。只有拥有相应私钥的人才能解密。这实现了消息的安全性。2)如果您使用私钥签名,则可以使用公钥来验证真实性。访问公钥的每个人都可以验证消息的真实性。这证明了只有你才能加密它。这叫做签名。

票数 8
EN

Stack Overflow用户

发布于 2014-04-13 19:43:37

几个月前我编写了一个非常有用的库,它是一个非常容易使用的支持OpenSSL的包装器。该接口非常可读性强,易于理解。

代码语言:javascript
复制
public_key, private_key = Encryption::Keypair.generate( 2048 )
plaintext = 'some secret data'
securetext = public_key.encrypt( plaintext )
private_key.decrypt( securetext ) == plaintext # true

这叫做加密

GitHub上的加密

Rubygems加密

文档

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

https://stackoverflow.com/questions/12662902

复制
相关文章

相似问题

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