问题描述
我有一段代码可以使用OID提取扩展值。提取值后,使用Bouncy Castle在Java中完成以下操作:
private DEROctetString bytes;
public KeyInfo(byte[] bytes) {
this.bytes = new DEROctetString(bytes);
}
public static KeyInfo valueOf(byte[] asn1) throws IOException {
ASN1Object object = ASN1Primitive.fromByteArray(asn1);
DEROctetString der = (DEROctetString)object.toASN1Primitive();
return new KeyInfo(der.getoctets());
}
public byte[] getBytes() {
return bytes.getoctets();
}
最后,我使用getBytes()
方法使用该值进行进一步的操作。
有人可以解释一下上面的代码中发生了什么吗?
我添加了一段代码,以从Golang的证书中提取特定OID的扩展名。 我不确定如何在Golang中实现以上部分。任何人都可以共享任何示例代码吗?
这是我到目前为止所拥有的:
extensions = cert.Extensions
ID := asn1.ObjectIdentifier{2,6,7,8}
for _,ext := range extensions {
if reflect.DeepEqual(ext.Id,ID) {
testextValue = ext.Value
}
谢谢。
更新:
所以,我尝试了这个,
var n []byte
asn1.Unmarshal(value,&n)
fmt.Println("After marshal/unmarshal: ",n)
其中value是该特定extension.OID的extension.value。 但是print语句显示[]。
我需要做等价
ASN1Object object = ASN1Primitive.fromByteArray(asn1);
DEROctetString der = (DEROctetString)object.toASN1Primitive();
return new KeyInfo(der.getoctets());
在golang中。
我正在尝试使用VerifyPKCS1v15验证密钥和签名。如果我直接通过ext.Value,它会给我验证错误。我想我需要先进行上述转换。
更新(30/8)
type BitString struct {
Bytes []byte // bits packed into bytes.
BitLength int // length in bits.
}
var bitstring BitString
_,err = asn1.Unmarshal(value,&bitstring)
fmt.Println("error",err)
fmt.Println("After marshal/unmarshal: ",bitstring.Bytes)
这将错误显示为结构错误:标记不匹配(16与{class:3 tag:84长度:67 isCompound:true}){可选:false显式的:false application:false私有的:false defaultValue:标记: stringType:0 timeType:0 set:false omitEmpty:false} BitString @ 3
任何人都可以共享示例代码会很有帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)