我想使用两个密钥对来实现两个通信系统之间不可否认的安全消息传递。我使用以下方法生成和存储了两组密钥对:
sys1_key = OpenSSL::PKey::RSA.generate( 2048 )
sys2_key = OpenSSL::PKey::RSA.generate( 2048 )这两个密钥对都将各自的公钥和私钥保存到文件中:
系统1有自己的公钥和私钥以及系统2的公钥。系统2有自己的公钥和私钥以及系统1的公钥。
在系统1上,我想使用系统1的私钥和系统2的公钥对其进行加密。此消息只能由系统2使用自己的私钥和系统1的公钥解密。
我们目前使用GPG实现了类似的过程,但是我想自动化这个过程--任何帮助都可以。我们在Ruby1.9.2上。
发布于 2012-10-01 14:49:50
私钥用于解密,公钥用于加密。
因此,如果系统1打算向系统2发送加密文本。
系统1应掌握系统2的公钥,并使用系统2的公钥对文本进行加密。系统2可以接收文本并使用自己的私钥解密。在发送端,您可以使用这样的代码。
#!/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编码只是一个可选的步骤,这取决于您是否希望通过线路发送二进制数据等等。
在接收方
#!/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)如果您使用私钥签名,则可以使用公钥来验证真实性。访问公钥的每个人都可以验证消息的真实性。这证明了只有你才能加密它。这叫做签名。
发布于 2014-04-13 19:43:37
几个月前我编写了一个非常有用的库,它是一个非常容易使用的支持OpenSSL的包装器。该接口非常可读性强,易于理解。
public_key, private_key = Encryption::Keypair.generate( 2048 )
plaintext = 'some secret data'
securetext = public_key.encrypt( plaintext )
private_key.decrypt( securetext ) == plaintext # true这叫做加密
Rubygems加密。
https://stackoverflow.com/questions/12662902
复制相似问题