Closed madsinbad closed 1 year ago
您好,我刚才把一个pem格式公钥经过base64解码后,发现倒数后64位就是hex的公钥本体,感谢! 另外还有一个问题,我这边刚下在您的网站上做了一下操作:
我把我这个一个hex的私钥:26e74535b5f5435090c6763d6500b6cc7578d61bf3871557474ccbbaf22e856d
填进您那个网站的SM2加解密的密钥框后,他自动转成了pem格式:
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEICbnRTW19UNQkMZ2PWUAtsx1eNYb84cVV0dMy7ryLoVtoAoGCCqBHM9V
AYItoUQDQgAEm6nV9amsKV6MurKa2/lID19byNpUP8VH+v+HxAMtagxte5fCiGkL
SFJI22hCCdeNbP/n5KZeRUItZzjozt8ixQ==
-----END EC PRIVATE KEY-----
而且我使用asn.1将其解码后,发现里面不仅有私钥本体
<SEQUENCE>
<INTEGER>1</INTEGER>
<OCTET_STRING>0x26E74535B5F5435090C6763D6500B6CC7578D61BF3871557474CCBBAF22E856D</OCTET_STRING>
<NODE Sign="a0">
<OBJECT_IDENTIFIER Comment="China GM Standards Committee" Description="sm2ECC">1.2.156.10197.1.301</OBJECT_IDENTIFIER>
</NODE>
<NODE Sign="a1">
<BIT_STRING>0x00049BA9D5F5A9AC295E8CBAB29ADBF9480F5F5BC8DA543FC547FAFF87C4032D6A0C6D7B97C288690B485248DB684209D78D6CFFE7E4A65E45422D6738E8CEDF22C5</BIT_STRING>
</NODE>
</SEQUENCE>
请问下,如果我在不知道公钥的情况下,怎么通过您说的那个暴力方法生成带有公钥信息的私钥pem呢? QAQ
公钥是可以通过私钥计算出来的。具体的算法没有去细究。我用的是前面提及的三方库。 网上应该有公开的算法。有兴趣你可以研究一下
Message ID: @.***>
我今天试了一下,按照你说的方式已经实现了,非常感谢(:
最简单的方法,你可以拿任意sm2密钥,base64解码成byte[] ,然后替换原来的hex密钥。用编码回base64即可。
如果你项目中有用到BoundCastle 库,你可以参考以下代码: const string CURVE_NAME = "sm2p256v1";
/// <summary> /// 通过hex祼密钥,创建私钥实体 /// </summary> /// <param name="hex"></param> /// <returns></returns> public static ECPrivateKeyParameters GetPrivateKey(byte[] hex) { var oid = GMNamedCurves.GetOid(CURVE_NAME); return new ECPrivateKeyParameters("EC", new BigInteger(1, hex), oid); }
------------------ 原始邮件 ------------------ 发件人: "cbanor/X-Website" @.>; 发送时间: 2022年9月14日(星期三) 下午4:36 @.>; @.***>; 主题: [cbanor/X-Website] 请问一下怎么将我的hex格式的sm2密钥转换为pem格式的吗?可以分享一下算法吗?因为我看好像不是简单的base64编码。感谢 (Issue #4)
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>