Closed honghuzhi closed 1 year ago
openssl ec –in pkcs8_key.pem –out pkcs1_key.pem 网上说的,不知道行不行,你可以直接解开pkcs8, 使用明文公私钥的方式 调用本项目的函数,
需要 openssl1.1. 以上的样子
命令试了下好像不行,pkcs8 如何解开为明文公私钥呢?不会Java好像没法处理,我的私钥和示例代码里面的pkcs8一样,也是200个字节长度,应该就是pkcs8格式了吧
我这边示例里的是 pkcs1的, 要解开,你可以调用项目里 util/myasn1里的decode解开,然后记下,或是使用自己熟悉的 asn1解析器 解开就行, pem文件里如果四行的是pkcs8的, 3行是pkcs1, 项目里的函数,如使用outkey的,是使用pkcs1的那种
还是转换不了
我用gmssl转换成功了164位的 pkcs1,但调用函数$sm2->doDecrypt($encryptData, $privateKey,) 其中 $privateKey 是经过bin2hex(base64_decode($privateKey)) 转换后的 242个长度的字符串 函数执行后,出现 gmp_init(): Unable to convert variable to GMP - string is not an integer 错误,这是什么原因呢
项目里 只有 签名的时候支持pkcs1的证书形式, 加解密 只支持 明文的 130 或 128 的 hex 公钥及 64位hex私钥,你得解开, 还是上面说的,
要解开,你可以调用项目里 util/myasn1里的decode解开,然后记下,或是使用自己熟悉的 asn1解析器 解开就行
调用MyAsn1::decode,解开后是 64位的16进制字符串,调用解密函数后,还是报错:gmp_init(): Unable to convert variable to GMP - string is not an integer
出现这个错误,还是 64位hex私钥 格式不对吗?私钥和密文不匹配不会报这个错误吧
你那 test/tasn1.php里的例子里修改成你的文件,解出来与原来的一样的不
Array
(
[0] => 01
[1] => 330BAB9F1CFCEC77EDBD0D0383A4EB905C4511BE3A61753BE2ED008C11BE69BC
[2] => Array
(
)
[3] => Array
(
)
)
$array[1] 就是私钥, 还不行的话,你用第三方的asn1解析下,正常是好使的,
是一样的,已经成功解密了,之前密文是base64 格式的,我没有进行处理,后来转成16进制后,能成功解密 还想问下,使用php 进行sm2解密,执行消耗大吗?比curl调用本地Java包解密是不是快点
倒是没有试过,应该会更快吧,
试了半天也没转换成功,求转换命令