【发布时间】:2018-05-26 02:47:39
【问题描述】:
我正在尝试使用 encoding/asn1 创建一个 DER 文件,但我不断收到无效的对象标识符运行时错误。 asn1.ObjectIdentifier 只是一个 []int,所以我不确定什么是无效的。
package main
import (
"encoding/asn1"
"fmt"
"log"
)
type algorithm struct {
Algo asn1.ObjectIdentifier
Null asn1.RawValue
}
func main() {
var myCert algorithm
myCert.Algo = asn1.ObjectIdentifier{42, 134, 72, 134}
myCert.Null = asn1.NullRawValue
mdata, err := asn1.Marshal(myCert)
if err != nil {
log.Fatalln(err)
}
fmt.Println(mdata)
}
程序退出并出现以下错误: “asn1:结构错误:无效的对象标识符”
游乐场示例here
【问题讨论】:
-
您确定 {42, 134, 72, 134} 有效吗?我试过 {0, 6 ,2} 没问题,这里是obj-sys.com/asn1tutorial/node10.html
-
为了这个问题,我确实稍微调整了值。原始 TLV 是来自 X.509 证书的算法标识符。我试图复制的十六进制编码 TLV 是:“06 09 2A864886F70D010101”。 06h 当然是对象标识符标签,09h 是长度,2A864886F70D010101 是对象的值。逐字节,值在base10中转换为{42, 134, 72, 134, 247, 13, 1, 1, 1}并失败。根据下面@YaFred 的回答,我转换错了吗?
-
要获取编码值 '06092A864886F70D010101'H,您必须使用此 OID:{ 1 2 840 113549 1 1 1 }
-
@YaFred,你能解释一下为什么会这样吗?这与“ANY”类型有关吗?