1 回答

TA贡献1865条经验 获得超7个赞
我试图重现你的问题,这对我有用......
考虑
package main
import "fmt"
import "crypto/rand"
import "crypto/rsa"
import "crypto/x509"
import "encoding/hex"
import (
"encoding/pem"
"log"
"os"
)
func main() {
reader := rand.Reader
bitSize := 64
keypair, _:= rsa.GenerateKey(reader, bitSize)
fmt.Println("Public key ", &keypair.PublicKey)
pubkey_bytes := x509.MarshalPKCS1PublicKey(&keypair.PublicKey)
fmt.Println(hex.Dump(pubkey_bytes))
block := &pem.Block{
Type: "MESSAGE",
Bytes: pubkey_bytes ,
}
if err := pem.Encode(os.Stdout, block); err != nil {
log.Fatal(err)
}
}
运行时控制台会显示
Public key &{14927333011981288097 65537}
00000000 30 10 02 09 00 cf 28 8a 49 37 1b 42 a1 02 03 01 |0.....(.I7.B....|
00000010 00 01 |..|
-----BEGIN MESSAGE-----
MBACCQDPKIpJNxtCoQIDAQAB
-----END MESSAGE-----
我使用https://asn1.io/asn1playground/
将此粘贴到架构中
World-Schema DEFINITIONS ::=
BEGIN
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
END
点击编译
将此粘贴到解码中
30 10 02 09 00 cf 28 8a 49 37 1b 42 a1 02 03 01 00 01
结果是
RSAPublicKey SEQUENCE: tag = [UNIVERSAL 16] constructed; length = 16
D0023E: Integer or enumerated value too long: 9; check field 'modulus' (type: INTEGER) of PDU #1 'RSAPublicKey'.
modulus INTEGER: tag = [UNIVERSAL 2] primitive; length = 9
2147483647
publicExponent INTEGER: tag = [UNIVERSAL 2] primitive; length = 3
65537
S0012E: Decoding of PDU #1 failed with the return code '10'.
我不确定他们为什么会发现错误,但 SEQUENCE 和 2 INTEGER 肯定存在(您实际上并不需要工具来查看它)
- 1 回答
- 0 关注
- 167 浏览
添加回答
举报