我正在研究接收加密文件的.NET系统,我正在使用EnvelopedCms对象解密它们。
解密过程工作正常,但我希望能够确定发件人在加密时实际使用的证书的指纹。
这样做的原因是,当证书即将到期时,并且要求发件人使用新证书,该证书的有效起始日期与过期证书的有效期重叠,我想能够识别哪些发送者已经切换,哪些发送者没有。
在旧证书实际到期之前,两个私钥都可用,因此无论使用哪个私有密钥,该文件都将成功解密。
我目前的代码是:
Hotel
“data”包含cyphertext,“MyCertificate”包含我们希望他们使用的证书的指纹,并且“ActualEncrpytionCertificate”的目的是包含他们实际使用的证书的指纹,但正如您所看到的,这是目前只是一个占位符。
我查看了EnvelopedCms对象的属性,希望找到一个证书集合,但这不存在。有一个RecipientInfos集合,但这似乎不包含有关加密证书的任何信息。
我是否隐瞒了什么,或者是否有其他方法可以从EnvelopedCms对象中识别证书?
答案 0 :(得分:0)
API不会发出匹配的证书,接受证书的import dlib
import cv2
from lib.capture import Capture
win = dlib.image_window()
cap = Capture() # Capture image from webcam
cap.start()
while(True):
frame = cap.get() # Get current frame from webcam
if frame is not None:
frame = cv2.flip(frame, 1)
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) # Converting from RGB to BGR (as dlib.image_window requires)
win.set_image(frame) # Display the resulting frame
重载仍将始终在Windows证书存储中搜索,因此唯一真正可行的选项是根据RecipientInfo值进行匹配
请注意,Decrypt
匹配有两种不同的实现方式。第一个更有效,因为它不会在垃圾收集器中抛出额外的数据。第二个是生命周期管理在IssuerAndSerialNumber
和SubjectKeyIdentifier
变体中是对称的。如果您在调用IssuerAndSerialNumber
之后不需要将证书退还给任何人,那么您可能需要第一个(因为您不需要关心谁/不会调用FindRecipientCerts
)
Dispose
用C#回答你的VB问题道歉。