Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RAILS-解密PKCS8_Ruby On Rails_Ruby_Ruby On Rails 4_Encryption - Fatal编程技术网

Ruby on rails RAILS-解密PKCS8

Ruby on rails RAILS-解密PKCS8,ruby-on-rails,ruby,ruby-on-rails-4,encryption,Ruby On Rails,Ruby,Ruby On Rails 4,Encryption,如何在RoR上执行此操作,但仅获取pem字符串 openssl pkcs8 -inform DER -in file.key -passin pass:xxxxxxxx >private_key.pem 我一直在尝试这个解决方案: 但是RSA.new既不返回PUB key,也不返回PRIV key:nested asn1 error Ruby代码: def get_pem(key_file, passphrase) pem = der_to_pem('PRIVATE KEY', Fil

如何在RoR上执行此操作,但仅获取pem字符串

openssl pkcs8 -inform DER -in file.key -passin pass:xxxxxxxx >private_key.pem
我一直在尝试这个解决方案:

但是RSA.new既不返回PUB key,也不返回PRIV key:nested asn1 error

Ruby代码:

def get_pem(key_file, passphrase)
 pem = der_to_pem('PRIVATE KEY', File.read(key_file))
 key = OpenSSL::PKey::RSA.new(pem, passphrase)
end

def box(tag, lines)
  lines.unshift "-----BEGIN #{tag}-----"
  lines.push "-----END #{tag}-----"
  lines.join("\n")
end

def der_to_pem(tag, der)
  box tag, Base64.strict_encode64(der).scan(/.{1,64}/)
end
以下是调用openssl工具之前每个函数的输出:

功能:der_to_pem 标签:私钥 德:


[编码>0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\x82\u0002\x80\xFE[J\x92\Xex˺\xA5u*V\xBD\xF10\Vߝ\xF4\xEF\x99\xd63您的Ruby代码是什么样子的?对不起,我忘了。我立即怀疑的是
der_to_pem
函数。它的输出是否用
openssl
工具进行验证?这些事情很容易出错。der_to_pem函数只取file.key de的二进制字符串base64上的代码,box函数添加开始和结束标记,在调用openssl工具之前是否要查看字符串?我只是好奇这是否正确验证。您需要确保这里的每个步骤都产生正确的输出。您的Ruby代码是什么样子的?抱歉,我忘了。我的直接怀疑是
deru to_pem
function.Doe使用
openssl
工具验证的输出是什么?很容易让这些东西出错。deru to_pem函数只需获取文件的二进制字符串。key decode on base64,box函数添加开始和结束标记,你想在调用openssl工具之前查看字符串吗?我只是好奇这是否正确验证。你需要确保这里的每个步骤都产生正确的输出。
0\x82\u0002\xC60@\u0006\t*\x86H\x86\xF7\r\u0001\u0005\r030\e\u0006\t*\x86H\x86\xF7\r\u0001\u0005\f0\u000E\u0004\b\u0002\u0001\u0000\u0002\x81\x81\u0000\xA4\u0002\u0002\u0004\u00000\u0014\u0006\b*\x86H\x86\xF7\r\u0003\a\u0004\b0\x82\u0002v\u0002\u0001\u00000\u0004\x82\u0002\x80\xFE[J\x92\xED˺\xA5u*V\xBD\xF10\vߝ\xF4\xEF\x99\xD63<xׇ\x82\u0001㙶\xB7\xAE\x88J\u001C\xCFi\n\xCD\xCE?*\xCBPD\r\xAA+G\xFB\u00180~2</\x9E\x8C\x87\xE6?ꋹ@\xB1\xB0\u0590H\xF2\xDC\xF5F$\xA4\xC3\xF9䳹\u007F{*\xE0\"\x9C\x82\x82\f)T\u001C\x84\xE7\xEFQl\xC5\xCF^\x91\xC65\x88\x92\f\u0019n\xC7y\xB4|\xA3`\xC0\x8C\xC1\x96S7Nf\xC5\xD0\r\xFA\xBFG\u0015\xB1\x81\xF5p%\u0012T2\x95\xFE2Z\xD7\xED\xE12\u0001\a\xACN\xA6#\xBE\x94\xA1\x97'<\x9C\xB2ҾI\xF1io\xBF\xD1\xE0\xB6\u001A\u0010o\u0015\xEB'F~\xAC\xC3eG\xBF\xF2\x84\x88\xD9\u001C\u000E\xED\u0013s\x91jTnU\u0379[\x9C?\xB3ܮ\xD4\u0016n\xAE?\xD0\u0001\xB0\u0016)SMd\xF2\u0002q\xBB\xC5;\x83\u0019+\x90\u0018\u007Fܳ\xA4\xC4\u001Cs\xFA\u0013\xA1\xA3;d\ekUT\x98/wd\u001E\x9Er\xD4\u0002\xE6\xEBB'$\u0014\xBF\b\xF3\xDC\xCFe,;\x97\x9CӒ\xC1\u0000\x9F\xFDu#\xA4\u007F\r\u0016D 1\xEA\f^\xD0ű\r'ܝ\xDF\xF7\xCE\xCE+{\x96^ь\b_\u0012\xDC\xD8x9}\u0005Rq\xB9\xCC\xFE\xFEvd\xB7\u00108\xC8\xE1\xE5\xD4\xC4i\x9D\xDA(\u0005[\xC0_t\xF5\e\u0018\xBB\u001D\xEC\xAE\xC7\xE8\x8A(\x90w\xCF\xFEcl[\xC2\a3\xB2 ~^\xC4\u001D\u000F\xACl\u0011M\xE4\xA1\xF2Y\u0004o,\xAEl\xC1\u000F$\u0013qSc\x99\u001A\xD2$|\xBC\xAB\x90\xE7\xF0\xF7f\xDFȿ\u0016;lA_\x85\xCA\u000F\x9B#~d\xF2\x9C\u0013*\xA9=Jl\x81t\x85\x96*l\xA8(kt\xD4\u0019\xB4\xB8\u0001U7\xEC\xE9.#;\xA0\u000F\u0003\x91\u0004-\n/P\xDC\xCC\u001A\xA5\xDD\xDA\xE4\u001F\xF2\\\xF1ʗ,E\"0\x93\xD7\xD9\xD1\u001F\x84G_C\xCC\xC23~\xBDC\xA7ab\xBD\xBC\x83ʱ\xE3\xE0\x8F ^\xC0\xDF~\xB5\xBAT\xE8ގ\xFE\xC3\xE5\xCF\xEB\xAC\xE3|n\x8B\u000E&%ʍqk\xAD=\x86\u0005\xD4\xD9+\xF4\xA6\u0000d!\x95b\xEDuY\xAE\xE5jG0\x85\xDE\"\xADc\xACK\x833\xA5lP#\u0000=G\xB3\xCE\xF6\xC0[ԙU\xD5\e:{\u00100\x9B{\x95\x9C@ \xB3\x86\xC2@S\u0015~p؛\u0013\xF48[\xBE\b\e\u007F\xD7x)\u0010\xD7\u001A\xDE\xF2\x9E\xA5X\x8A\u007FV\xF3\xECޱ\xC9\acl\u0004B\x8F\xD3c\x80\xE1\u0016BI\xED\xAA}
0\x82\u0002\xC60@\u0006\t*\x86H\x86\xF7\r\u0001\u0005\r030\e\u0006\t*\x86H\x86\xF7\r\u0001\u0005\f0\u000E\u0004\b\u0002\u0001\u0000\u0002\x81\x81\u0000\xA4\u0002\u0002\u0004\u00000\u0014\u0006\b*\x86H\x86\xF7\r\u0003\a\u0004\b0\x82\u0002v\u0002\u0001\u00000\u0004\x82\u0002\x80\xFE[J\x92\xED˺\xA5u*V\xBD\xF10\vߝ\xF4\xEF\x99\xD63<xׇ\x82\u0001㙶\xB7\xAE\x88J\u001C\xCFi\n\xCD\xCE?*\xCBPD\r\xAA+G\xFB\u00180~2</\x9E\x8C\x87\xE6?ꋹ@\xB1\xB0\u0590H\xF2\xDC\xF5F$\xA4\xC3\xF9䳹\u007F{*\xE0\"\x9C\x82\x82\f)T\u001C\x84\xE7\xEFQl\xC5\xCF^\x91\xC65\x88\x92\f\u0019n\xC7y\xB4|\xA3`\xC0\x8C\xC1\x96S7Nf\xC5\xD0\r\xFA\xBFG\u0015\xB1\x81\xF5p%\u0012T2\x95\xFE2Z\xD7\xED\xE12\u0001\a\xACN\xA6#\xBE\x94\xA1\x97'<\x9C\xB2ҾI\xF1io\xBF\xD1\xE0\xB6\u001A\u0010o\u0015\xEB'F~\xAC\xC3eG\xBF\xF2\x84\x88\xD9\u001C\u000E\xED\u0013s\x91jTnU\u0379[\x9C?\xB3ܮ\xD4\u0016n\xAE?\xD0\u0001\xB0\u0016)SMd\xF2\u0002q\xBB\xC5;\x83\u0019+\x90\u0018\u007Fܳ\xA4\xC4\u001Cs\xFA\u0013\xA1\xA3;d\ekUT\x98/wd\u001E\x9Er\xD4\u0002\xE6\xEBB'$\u0014\xBF\b\xF3\xDC\xCFe,;\x97\x9CӒ\xC1\u0000\x9F\xFDu#\xA4\u007F\r\u0016D 1\xEA\f^\xD0ű\r'ܝ\xDF\xF7\xCE\xCE+{\x96^ь\b_\u0012\xDC\xD8x9}\u0005Rq\xB9\xCC\xFE\xFEvd\xB7\u00108\xC8\xE1\xE5\xD4\xC4i\x9D\xDA(\u0005[\xC0_t\xF5\e\u0018\xBB\u001D\xEC\xAE\xC7\xE8\x8A(\x90w\xCF\xFEcl[\xC2\a3\xB2 ~^\xC4\u001D\u000F\xACl\u0011M\xE4\xA1\xF2Y\u0004o,\xAEl\xC1\u000F$\u0013qSc\x99\u001A\xD2$|\xBC\xAB\x90\xE7\xF0\xF7f\xDFȿ\u0016;lA_\x85\xCA\u000F\x9B#~d\xF2\x9C\u0013*\xA9=Jl\x81t\x85\x96*l\xA8(kt\xD4\u0019\xB4\xB8\u0001U7\xEC\xE9.#;\xA0\u000F\u0003\x91\u0004-\n/P\xDC\xCC\u001A\xA5\xDD\xDA\xE4\u001F\xF2\\\xF1ʗ,E\"0\x93\xD7\xD9\xD1\u001F\x84G_C\xCC\xC23~\xBDC\xA7ab\xBD\xBC\x83ʱ\xE3\xE0\x8F ^\xC0\xDF~\xB5\xBAT\xE8ގ\xFE\xC3\xE5\xCF\xEB\xAC\xE3|n\x8B\u000E&%ʍqk\xAD=\x86\u0005\xD4\xD9+\xF4\xA6\u0000d!\x95b\xEDuY\xAE\xE5jG0\x85\xDE\"\xADc\xACK\x833\xA5lP#\u0000=G\xB3\xCE\xF6\xC0[ԙU\xD5\e:{\u00100\x9B{\x95\x9C@ \xB3\x86\xC2@S\u0015~p؛\u0013\xF48[\xBE\b\e\u007F\xD7x)\u0010\xD7\u001A\xDE\xF2\x9E\xA5X\x8A\u007FV\xF3\xECޱ\xC9\acl\u0004B\x8F\xD3c\x80\xE1\u0016BI\xED\xAA}