【问题标题】:How to replicate openssl command decrypting cms file如何复制openssl命令解密cms文件
【发布时间】:2020-08-25 11:46:28
【问题描述】:

我曾尝试在 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"

【问题讨论】:

    标签: go encryption openssl pkcs#7


    【解决方案1】:

    事实证明,mozilla pkcs7 library 在密钥解密方面的支持非常有限,并且无论 pkcs7 对象密钥算法标识符是什么都使用了“rsa.DecryptPKCS1v15”。我的密钥是使用 id-RSAES-OAEP 加密的,必须使用 'rsa.DecryptOAEP'。我的解决方案是分叉库并更新 Decrypt 函数以检查使用了哪种算法并在适用时使用 DecryptOAEP。

    【讨论】:

      猜你喜欢
      • 2012-07-31
      • 2021-01-30
      • 2016-04-22
      • 2018-04-19
      • 2015-11-27
      • 2013-10-14
      • 1970-01-01
      相关资源
      最近更新 更多