如何复制OpenSSL命令解密CMS文件

问题描述

我曾尝试在Go中解密CMS文件,但无法这样做。我用来通过openssl解密的命令是openssl cms -decrypt -inform DER -recip X -inkey Y。这样可以很好地工作,并且文件已正确解密。目前,我在Go中使用os / exec来使用同一命令对其进行解密,但是我希望有一些库可以执行相同的功能。但是我已经能够弄清楚是怎么做到的。

我曾尝试使用pkcs7解密,但没有成功,尽管我怀疑此软件包是正确的软件包。我目前的尝试:

pkey,_ := ioutil.ReadFile(privKeyLoc)

//decrypt attempt 1
pk_obj,_ := pkcs7.Parse(data)
_,err := pk_obj.DecryptUsingPSK(pkey)
//err = "pkcs7: content data is a decryptable data type"

//attempt 2
rs,_ := ssh.ParseRawPrivateKey(pkey)
crt,_ := tls.LoadX509KeyPair(pubKeyLoc,privKeyLoc)
x509cert,_ := x509.ParseCertificate(crt.Certificate[0])
_,err = pk_obj.Decrypt(x509cert,rs.(crypto.PrivateKey))
//err = "crypto/rsa: decryption error"

解决方法

原来的问题是,mozilla pkcs7 library在密钥解密方面的支持非常有限,并且无论pkcs7对象密钥算法标识符是什么,都使用'rsa.DecryptPKCS1v15'。我的密钥是使用id-RSAES-OAEP加密的,为此必须使用'rsa.DecryptOAEP'。我的解决方案是派生该库并更新Decrypt函数以检查使用哪种算法,并在适用时使用DecryptOAEP。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...