2010-08-18 39 views
5

Tôi đang cố thêm thuộc tính thời gian ký vào tệp mà tôi đang ký bằng SignedCMS.Thêm thời gian đăng nhập vào PKCS7 đã ký CMS?

private byte[] signFile(byte[] fileContent, X509Certificate2 verificationCert) 
{ 
    ContentInfo contentInfo = new ContentInfo(fileContent); 

    SignedCms signedCMS = new SignedCms(contentInfo); 

    CmsSigner cmsSigner = new CmsSigner(SubjectIdentifierType.IssuerAndSerialNumber, verificationCert); 

    Oid signedDate = new Oid("1.2.840.113549.1.9.5"); //oid for PKCS #9 signing time 

    signedDate.Value = DateTime.Now.ToString(); 

    CryptographicAttributeObject cryptoAtty = new CryptographicAttributeObject(signedDate); 

    cmsSigner.SignedAttributes.Add(cryptoAtty); 

    signedCMS.ComputeSignature(cmsSigner, false); 

    byte[] encoded = signedCMS.Encode(); 

    return encoded; 
} 

Lỗi được tạo ra trên Encode:

CryptographicException: The object identifier is poorly formatted. 

Bất kỳ ý tưởng về cách thêm đúng thời gian ký kết? Tôi nghĩ rằng tôi có thể phải chuyển đổi thời gian ký thành một đối tượng được mã hóa ASN.1 và thêm nó vào các giá trị của cryptoAtty. Làm cách nào để chuyển đổi ngày/giờ thành đối tượng được mã hóa ASN.1?

Trả lời

10

alt text

Điều đó thật dễ dàng.

cmsSigner.SignedAttributes.Add(new Pkcs9SigningTime()); 
Các vấn đề liên quan