从Ruby打开RSA私钥
我想我知道如何创建自定义加密RSA密钥,但是如何读取像ssh-keygen那样加密的密钥呢?
我知道我可以这样做:
OpenSSL::PKey::RSA.new(File.read('private_key'))
但是然后OpenSSL要求我提供密码……我怎样才能将它作为参数传递给OpenSSL?
而且,如何创建一个与ssh-keygen生成的兼容的?
我做这样的事情来创建私有加密密钥:
pass = '123456' key = OpenSSL::PKey::RSA.new(1024) key = "0000000000000000#{key.to_der}" c = OpenSSL::Cipher::Cipher.new('aes-256-cbc') c.encrypt c.key = Digest::SHA1.hexdigest(pass).unpack('a2' * 32).map {|x| x.hex}.pack('c' * 32) c.iv = iv encrypted_key = c.update(key) encrypted_key << c.final
此外,当我尝试无密码登录时,OpenSSL :: PKey :: RSA.new(1024)(没有加密)生成的密钥不起作用(即,我将公钥复制到服务器并使用私有密钥到登录)。
此外,当我通过OpenSSL打开一个ssh-keygen文件,然后检查其内容时,它似乎在键的开头和结尾有其他字符。 这是正常的吗?
我真的不了解这些安全性的东西,但我正在努力学习。 我做错了什么?
根据这里的博客文章:
http://stuff-things.net/2008/02/05/encrypting-lots-of-sensitive-data-with-ruby-on-rails/
你可以简单地做:
OpenSSL :: PKey :: RSA.new(File.read(’private_key’),’passphrase’)
祝你好运。
我在这方面取得了一些进展。 如果我使用Net :: SSH库,我可以这样做:
Net::SSH::KeyFactory.load_private_key 'keyfile', 'passphrase'
通过阅读源代码,我还没有弄清楚该库对OpenSSL的PKey :: RSA.new做了什么来完成这个…然后我再去测试,果然,OpenSSL可以打开私钥就好了没有Net :: SSH ……我做了很多测试,以前我没有正确测试过。
但我仍然有创建SSH兼容密钥对的问题……也许我会再次测试并得到答案:P …不,我对那部分不感兴趣
- 如何使用AES 256 ECB PKCS5Padding在ruby中加密数据
- Ruby SSL握手没有收到服务器Hello回来 – 使用代理Net :: HTTP
- Lion:RVM安装rubies的问题 – 与openssl相关的问题
- 为什么我不能使“OpenSSL with Ruby”和“Command line OpenSSL”可以互操作?
- 已经在jruby-openssl中初始化了常量
- 在ruby中,如何在创建OpenSSL PKCS12对象后获取主题,颁发者等
- 如何在Ruby中设置TLS上下文选项(如OpenSSL :: SSL :: SSL_OP_NO_SSLv2)
- 第二部分:如何使Ruby AES-256-CBC和PHP MCRYPT_RIJNDAEL_128一起发挥得很好
- 在Windows 7 x86上使用Ruby安装OpenSSL for eventmachine