猿问

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

我正在尝试读取加密的 PKCS8 私钥文件。我生成了这样的密钥:


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

openssl 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 文件的库。


有谁有想法吗?


犯罪嫌疑人X
浏览 634回答 2
2回答

Smart猫小萌

Go 没有在标准库中解密 PKCS8 密钥的功能。你可以这个包:https : //github.com/youmark/pkcs8/blob/master/pkcs8.go#L103

MM们

为遇到相同问题的任何人提供更长的解释。什么会起作用你的第一个命令openssl genrsa -out file.pem -passout pass:file -aes256 1024生成一个 PKCS#1 私钥文件(file.pem):-----BEGIN RSA PRIVATE KEY-----Proc-Type: 4,ENCRYPTEDDEK-Info: AES-256-CBC,1DA219DB746F88C6DDA0D852A0FD3232AEf09rGkgGEJ79GgO4dEVsArwv4IbbODlxy95uHhfkdGYmuk6OlTpiCUE0GT68wnKFJfBcHr8Z3VqiHGsXxM5QlKhgnfptxfbrdKErgBD5LQcrvnqmf43KeD4lGQcpiy......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+ordsVfqsCAggBMAwGCCqGSIb3DQIJCQAwHQYJYIZIWAUDBAEqBBCipOAAxWkC0/zkNLNYTSMgBIIS......zfdxjZ0XmPiwED2azsLMnRrWnRj2UqMtnv9zO/ucik9za-----END ENCRYPTED PRIVATE KEY-----x509.DecryptPEMBlock()不支持这种格式。正如#8860所指定的,Go 的核心库在不久的将来没有真正支持 pkcs#8 的计划。正如Gregory所提到的,如果您想使用它,那么使用github.com/youmark/pkcs8(文档)等 3rd 方库会更好。
随时随地看视频慕课网APP

相关分类

Go
我要回答