Closed chengh0 closed 8 months ago
from base64 import b64decode
private_key_str = ""
der_bytes = b64decode(private_key_str).hex()
print(der_bytes[72:136].upper())
72:136 这个区间代表什么含义. 公钥也是如此吗?
72:136 这个区间代表什么含义. 公钥也是如此吗?
der_bytes下标为72的地方开始存放私钥,SM2私钥为256bit,转换为hex格式后长度为64,所以只需要取72:136区间里hex格式的数据就可以了,公钥区间是[-128:],公钥存放在der_bytes的末尾,公钥长为512bit,转换为hex格式后长度为128,所以只需要取 [-128:] 这个区间就可以了。
请问一下使用java生成的base64格式的SM4密钥怎么转换为16进制呢?
请问一下使用java生成的base64格式的SM4密钥怎么转换为16进制呢?
可以试下python的asn1tools这个库,之前用它搞过sm2的密钥,sm4的你可以试下
公钥:MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEw7HaSXoBMMJ1TSjYILT+DwgOV6cl99DkMt+BSTT08aL4k1TYGN8IK9rFqe4+0PK77NKid0KnCPpQ+OXo7E0B2Q==
私钥: MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgUyKbopOiWomZYazmPz69QbnMahzoLgenzSI3qN5eA+WgCgYIKoEcz1UBgi2hRANCAATDsdpJegEwwnVNKNggtP4PCA5XpyX30OQy34FJNPTxoviTVNgY3wgr2sWp7j7Q8rvs0qJ3QqcI+lD45ejsTQHZ
转成这种格式的
16进制的公钥和私钥
private_key = '00B9AB0B828FF68872F21A837FC303668428DEA11DCD1B24429D0C99E24EED83D5' public_key = 'B9C9A6E04E9C91F7BA880429273747D7EF5DDEB0BB2FF6317EB00BEF331A83081A6994B8993F3F5D6EADDDB81872266C87C018FB4162F5AF347B483E24620207'