为了账号安全,请及时绑定邮箱和手机立即绑定

尝试读取加密的私钥时“块中没有 DEK-Info 标头”

尝试读取加密的私钥时“块中没有 DEK-Info 标头”

Go
犯罪嫌疑人X 2021-11-15 15:20:28
我正在尝试读取加密的 PKCS8 私钥文件。我生成了这样的密钥:openssl genrsa -out file.pem -passout pass:file -aes256 1024openssl pkcs8 -topk8 -inform pem -in file.pem -outform pem -out filePKCS8.pem我尝试以这种方式在 Go 中阅读它:block, _ := pem.Decode(key)return x509.DecryptPEMBlock(block, password)但我收到一条错误消息:x509: no DEK-Info header in block但是,我无法弄清楚出了什么问题。我生成的密钥错误还是使用了错误的库?我看到专门用于读取未加密 PKCS8 文件的库,但没有专门用于加密 PKCS8 文件的库。有谁有想法吗?
查看完整描述

2 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

Go 没有在标准库中解密 PKCS8 密钥的功能。

你可以这个包:https : //github.com/youmark/pkcs8/blob/master/pkcs8.go#L103


查看完整回答
反对 回复 2021-11-15
?
MM们

TA贡献1886条经验 获得超2个赞

为遇到相同问题的任何人提供更长的解释。


什么会起作用

你的第一个命令


openssl genrsa -out file.pem -passout pass:file -aes256 1024

生成一个 PKCS#1 私钥文件(file.pem):


-----BEGIN RSA PRIVATE KEY-----

Proc-Type: 4,ENCRYPTED

DEK-Info: AES-256-CBC,1DA219DB746F88C6DDA0D852A0FD3232


AEf09rGkgGEJ79GgO4dEVsArwv4IbbODlxy95uHhfkdGYmuk6OlTpiCUE0GT68wn

KFJfBcHr8Z3VqiHGsXxM5QlKhgnfptxfbrdKErgBD5LQcrvnqmf43KeD4lGQcpiy

...

...

mAKMCwiU/GKZz8ZwQ4qGkBlVVCOFfgwmfbqguJF2l8yzM8lYI9MZ9NEwKkvEbc

-----END RSA PRIVATE KEY-----

这个私钥文件可以被x509.DecryptPEMBlock()解析和解密。


什么行不通,为什么

你的第二个命令


openssl pkcs8 -topk8 -inform pem -in file.pem -outform pem -out filePKCS8.pem

将该文件转换为 PKCS#8 格式 (filePKCS8.pem)。


子命令genpkey将直接产生类似的结果:


openssl genpkey -algorithm RSA -aes256 \

  -pkeyopt rsa_keygen_bits:1024 -out filePKCS8.pem

生成的 filePKCS8.pem(无论哪种方式)都类似于:


-----BEGIN ENCRYPTED PRIVATE KEY-----

MIISrTBXBgkqhkiG9w0BBQ0wSjKpBgkqhkiG9w0BBQwwHAQIKL+ordsVfqsCAggB

MAwGCCqGSIb3DQIJCQAwHQYJYIZIWAUDBAEqBBCipOAAxWkC0/zkNLNYTSMgBIIS

...

...

zfdxjZ0XmPiwED2azsLMnRrWnRj2UqMtnv9zO/ucik9za

-----END ENCRYPTED PRIVATE KEY-----

x509.DecryptPEMBlock()不支持这种格式。正如#8860所指定的,Go 的核心库在不久的将来没有真正支持 pkcs#8 的计划。


正如Gregory所提到的,如果您想使用它,那么使用github.com/youmark/pkcs8(文档)等 3rd 方库会更好。


查看完整回答
反对 回复 2021-11-15
  • 2 回答
  • 0 关注
  • 633 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信