gpt4 book ai didi

ruby - 将 PKCS#8 二进制 key 加载到 Ruby 中

转载 作者:数据小太阳 更新时间:2023-10-29 06:54:48 25 4
gpt4 key购买 nike

我正在尝试将以二进制 DER 格式 (PKCS#8) 编码的特定私钥加载到 Ruby 中。

但是,OpenSSL::PKey 无法识别它。我可以通过做一些控制台工作并将其转换为 PEM 来使其工作,如下所示:

openssl pkcs8 -inform DER -in file.key -passin pass:xxxxxxxx >private_key.pem

此后可以正确读取 key 。

但是,因为我希望整个过程都在内存中完成,而不是写入和读取文件。

所以我的问题是:是否可以将二进制编码的 DER 格式的私钥加载到 Ruby/OpenSSL 中?

谢谢你的时间,

费尔南多

最佳答案

是的,您可以使用 Ruby OpenSSL间接加载 PKCS#8 DER 编码的私钥。

OpenSSL::PKey::RSA.new 只会处理 PEM 格式的 PKCS#8,但很容易读取二进制 DER 并将其转换为 PEM 格式的字符串,然后加载来自字符串。

例如,使用这些 DER 编码的私钥:

$ openssl genrsa | openssl pkcs8 -topk8 -outform DER \
-nocrypt -out pkcs8.key
$ openssl genrsa | openssl pkcs8 -topk8 -outform DER \
-v2 des3 -passout pass:secret -out pkcs8_des3.key

你可以这样做:

require 'openssl'
require 'base64'

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

pem = der_to_pem('PRIVATE KEY', File.read('pkcs8.key'))
key = OpenSSL::PKey::RSA.new(pem)

pem2 = der_to_pem('ENCRYPTED PRIVATE KEY', File.read('pkcs8_des3.key'))
key2 = OpenSSL::PKey::RSA.new(pem2, 'secret')

读取DER字节,对其进行Base64并在顶部和底部放置PEM标签,然后加载 key 。

关于ruby - 将 PKCS#8 二进制 key 加载到 Ruby 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4753184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com