Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Public key raw bytes length must be 64 #21

Closed
qingfengzxr opened this issue Feb 16, 2023 · 7 comments
Closed

Public key raw bytes length must be 64 #21

qingfengzxr opened this issue Feb 16, 2023 · 7 comments

Comments

@qingfengzxr
Copy link

您好, 目前我遇到这样的一个问题,在对接银行接口时,银行提供的公钥以base64的格式加密。
如下:
MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE1xPq3B3Cw2U+t+R7Fb0JCJvy87/LDbUDFilGjkQU89VLl57pbUPLKUwP2jnAyOEKmJS9USsz+VwXNd4/bjdIFA==

base64Decode之后,得到的bytes字节长度为92,大于64。
请问您遇到过类似的问题吗?该如何解决呢

@hyfree
Copy link

hyfree commented Feb 16, 2023

https://blog.csdn.net/weixin_43408952/article/details/124584600

3059
	3013
		0607 2a8648ce3d0201
		0608 2a811ccf5501822d
	0342
		0004
			d713eadc1dc2c3653eb7e47b15bd09089bf2f3bfcb0db5031629468e4414f3d5
			4b979ee96d43cb294c0fda39c0c8e10a9894bd512b33f95c1735de3f6e374814

7F86A68FC89A80ACD9B4D0A4C26DC4DE558EEEB28A40763E56BF0C86C19EC3BB
37E6DB433426F9AB492D18A7D192874D59B64286C8F10102E3022A880C901D60

@qingfengzxr
Copy link
Author

qingfengzxr commented Feb 16, 2023

已解决,是这个base64原文的格式问题,它的一个格式是这样的:
标准公钥头|裸公钥X|裸公钥Y

各字段字节长度:
(54)|(64)|(64)

解析时需要按照这种格式提取出 x和y, 之后再通过下面这种方法构建。

	pub := new(sm2.PublicKey)
	pub.Curve = sm2.GetSm2P256V1()
	xBytes, _ := hex.DecodeString(x)
	yBytes, _ := hex.DecodeString(y)
	pub.X = new(big.Int).SetBytes(xBytes)
	pub.Y = new(big.Int).SetBytes(yBytes)

无法直接使用sm2.RawBytesToPublicKey()方法进行构建。
我不太清楚这种是什么格式,如果能明确格式的话,我可以提交一个pull request来提供一个获取该格式公钥的解析方法。

@qingfengzxr
Copy link
Author

https://blog.csdn.net/weixin_43408952/article/details/124584600

3059
	3013
		0607 2a8648ce3d0201
		0608 2a811ccf5501822d
	0342
		0004
			d713eadc1dc2c3653eb7e47b15bd09089bf2f3bfcb0db5031629468e4414f3d5
			4b979ee96d43cb294c0fda39c0c8e10a9894bd512b33f95c1735de3f6e374814

7F86A68FC89A80ACD9B4D0A4C26DC4DE558EEEB28A40763E56BF0C86C19EC3BB
37E6DB433426F9AB492D18A7D192874D59B64286C8F10102E3022A880C901D60

感谢您的解答,我对密码学的研究不是很透彻,不太清楚这是不是就是PEM格式。目前我通过翻译Java的Demo, 已解决该问题,可以的话您可以看看我的回复,帮忙确认一下是否是PEM格式的问题。

@hyfree
Copy link

hyfree commented Feb 16, 2023

你可以确认一下XY是否为
d713eadc1dc2c3653eb7e47b15bd09089bf2f3bfcb0db5031629468e4414f3d5
4b979ee96d43cb294c0fda39c0c8e10a9894bd512b33f95c1735de3f6e374814

@qingfengzxr
Copy link
Author

你可以确认一下XY是否为 d713eadc1dc2c3653eb7e47b15bd09089bf2f3bfcb0db5031629468e4414f3d5 4b979ee96d43cb294c0fda39c0c8e10a9894bd512b33f95c1735de3f6e374814

Uploading image.png…
是的,是这两个数。

@hyfree
Copy link

hyfree commented Feb 17, 2023

请参考这个https://www.cnblogs.com/xinzhao/p/8963724.html
X509和ASN1,请参考相应规范,在此不赘述。

@qingfengzxr
Copy link
Author

请参考这个https://www.cnblogs.com/xinzhao/p/8963724.html X509和ASN1,请参考相应规范,在此不赘述。

好的,多谢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants