Open ChuLiqiang opened 8 months ago
加密算法与2.0与3.0是有所不同, 2.0的 pbkdf2算法使用 sh256哈稀,采用的是aes256-cbc对称加密算法, 3.0使用是 sm3哈稀, sm4-cbc加密 所以解开后: salt: A72168E851FBAB4A , iter是 2048次,aes的向量是:9DF9DF406B2ED6B29012C37ADAE41EF5, 使用pbkdf2算法算出密钥, 用用aec256-cbc 解密
2.0的 pbkdf2算法使用 sh256哈稀,采
用2.0的 gmssl命令行能解出未加密的私钥吗?
2.0项目demo 没有的话,就是没有了,只能源码里抠了
有现成工具就用现成工具,没有的话,用第三方库写几行代码。
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgvGHyWej6oup0n/uv
GTINk4ccmsjDSuN1E2vPONszsD+hRANCAAQQTvMFG5uPwznbyeVWfo5Vrj9IAnUZ
Ja6BFMbS17QqQo3l+23LHNuhedQ/NVc2CkZzcZn4W+jNe8uflNIwkTz0
-----END PRIVATE KEY-----
有现成工具就用现成工具,没有的话,用第三方库写几行代码。
-----BEGIN PRIVATE KEY----- MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgvGHyWej6oup0n/uv GTINk4ccmsjDSuN1E2vPONszsD+hRANCAAQQTvMFG5uPwznbyeVWfo5Vrj9IAnUZ Ja6BFMbS17QqQo3l+23LHNuhedQ/NVc2CkZzcZn4W+jNe8uflNIwkTz0 -----END PRIVATE KEY-----
老师,您能在具体说一下吗?网上我找了一些网站的例子,解析失败了。好像私钥这块的标准挺多的。导致第三方网站上面都是明文私钥不是加密后的私钥。我在GMSSL2.0源码搜过sm2p256v1这个关键字,里面没有例子。可能方式不对,这块有GMSSL的教程吗?或者您当前解析出来的私钥,是咋弄的?
你可以参考 https://github.com/emmansun/gmsm/blob/main/pkcs8/example_test.go ,先Parse 后 Marshal。
你可以参考 https://github.com/emmansun/gmsm/blob/main/pkcs8/example_test.go ,先Parse 后 Marshal。 用GO解析出来了,用gmssl不行吗?
@lpilp 不是给你解释过了吗?
https://github.com/guanzhi/GmSSL/blob/cfdcd0c0e3049ea86289f0be0b43372a69205494/src/sm2_key.c#L596
@lpilp 这位老师说的我没听太懂。因为这块理论知识比较缺乏。所以你们一看就明白的东西,我这边没听懂。不好还是很感谢两位老师的帮助。另外GO程序我刚刚试了不支持pbeWithMD5AndDES-CBC 私钥类型的解密,这块还有例子参考吗?
加密算法与2.0与3.0是有所不同, 2.0的 pbkdf2算法使用 sh256哈稀,采用的是aes256-cbc对称加密算法, 3.0使用是 sm3哈稀, sm4-cbc加密
所以解开后: salt: A72168E851FBAB4A , iter是 2048次,aes的向量是:9DF9DF406B2ED6B29012C37ADAE41EF5,
使用pbkdf2算法算出密钥, 用用aec256-cbc 解密
salt/iter/aes的向量 这三个我脑子里面是没有概念的....,我抽时间看一下相关知识。lpilp老师的话我现在理解是
关于pbeWithMD5AndDES-CBC, #1635 不是已经解释了吗?你这种老旧私钥是怎么产生的?遗留系统?
关于pbeWithMD5AndDES-CBC, #1635 不是已经解释了吗?你这种老旧私钥是怎么产生的?遗留系统?
恩,别人给的。
如果只要一锤子买卖,直接用 openssl就可以直接解开了, sh256 + aes-cbc这是 基本是标配 2.0的这种可以直接解, 3.0的就解不开了,一开始以为你是要实时解密,就写了算法,
openssl ec -in private_key.pem -out new_private_key.der
# 输入密码
将new_private_key.der 直接解开就行了,你那例子去掉密码后是
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEILxh8lno+qLqdJ/7rxkyDZOHHJrIw0rjdRNrzzjbM7A/oAoGCCqBHM9V
AYItoUQDQgAEEE7zBRubj8M528nlVn6OVa4/SAJ1GSWugRTG0te0KkKN5fttyxzb
oXnUPzVXNgpGc3GZ+FvozXvLn5TSMJE89A==
-----END EC PRIVATE KEY-----
然后这个der decode后就出来明文的么私钥了
如果只要一锤子买卖,直接用 openssl就可以直接解开了, sh256 + aes-cbc这是 基本是标配 2.0的这种可以直接解, 3.0的就解不开了,一开始以为你是要实时解密,就写了算法,
openssl ec -in private_key.pem -out new_private_key.der # 输入密码
将new_private_key.der 直接解开就行了,你那例子去掉密码后是
-----BEGIN EC PRIVATE KEY----- MHcCAQEEILxh8lno+qLqdJ/7rxkyDZOHHJrIw0rjdRNrzzjbM7A/oAoGCCqBHM9V AYItoUQDQgAEEE7zBRubj8M528nlVn6OVa4/SAJ1GSWugRTG0te0KkKN5fttyxzb oXnUPzVXNgpGc3GZ+FvozXvLn5TSMJE89A== -----END EC PRIVATE KEY-----
然后这个der decode后就出来明文的么私钥了
这个解析出来的私钥,好像比普通的私钥文件少个头部信息啊。
----BEGIN EC PRIVATE KEY-----
MHcCAQEEILxh8lno+qLqdJ/7rxkyDZOHHJrIw0rjdRNrzzjbM7A/oAoGCCqBHM9V
AYItoUQDQgAEEE7zBRubj8M528nlVn6OVa4/SAJ1GSWugRTG0te0KkKN5fttyxzb
oXnUPzVXNgpGc3GZ+FvozXvLn5TSMJE89A==
-----END EC PRIVATE KEY-----
少个头部信息是不是3.0是不是又不行了?
2.0版本中gmssl ecparam -genkey -name sm2p256v1 | gmssl pkcs8 -topk8 -out 11000000002090000001_SIGN.key 然后我输入密码12345678产生了11000000002090000001_SIGN.key。这个Key是带密码的?gmssl怎么把1000000002090000001_SIGN.key转换成不带密码的key啊? gmssl3我知道怎么弄。但是2.0和3.0私钥之间不通用。2.0相关的参考手册有吗?
2.0版本产生的私钥密码
12345678
私钥内容-----BEGIN ENCRYPTED PRIVATE KEY----- MIHsMFcGCSqGSIb3DQEFDTBKMCkGCSqGSIb3DQEFDDAcBAinIWjoUfurSgICCAAw DAYIKoZIhvcNAgkFADAdBglghkgBZQMEASoEEJ3530BrLtaykBLDetrkHvUEgZDs dwstEPiHNZj9KgFSfoM99BQMXXwnmLRT4MgNR284oGPhLRk+pjnbR5XzQncBhUA5 NVgD47L81JIEnDUfbwR7DlV5Ox4/lPGeWaWqyQyklEbruMNVvb5afjVmT0D+oTwe h9OEDSB/oxqrN7TGUqwxpKLiunrDxXSu83uCBxDf4/O+IiXCfR2zjWx/CbfVie0= -----END ENCRYPTED PRIVATE KEY-----
求问3.0是怎么解出来的
2.0版本中gmssl ecparam -genkey -name sm2p256v1 | gmssl pkcs8 -topk8 -out 11000000002090000001_SIGN.key 然后我输入密码12345678产生了11000000002090000001_SIGN.key。这个Key是带密码的?gmssl怎么把1000000002090000001_SIGN.key转换成不带密码的key啊? gmssl3我知道怎么弄。但是2.0和3.0私钥之间不通用。2.0相关的参考手册有吗?
2.0版本产生的私钥密码
12345678
私钥内容