CMS (암호화 메시지 구문)는 RFC 5652에 지정됩니다. 그래서
SignedData ::= SEQUENCE {
version CMSVersion,
digestAlgorithms DigestAlgorithmIdentifiers,
encapContentInfo EncapsulatedContentInfo,
certificates [0] IMPLICIT CertificateSet OPTIONAL,
crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
signerInfos SignerInfos }
SignerInfo ::= SEQUENCE {
version CMSVersion,
sid SignerIdentifier,
digestAlgorithm DigestAlgorithmIdentifier,
signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL,
signatureAlgorithm SignatureAlgorithmIdentifier,
signature SignatureValue,
unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL }
다음 SignedData 유형은 기본적으로 서명 된 데이터 (된 encapContentInfo), 서명 된 인증서 (체인)로 구성된 ASN.1 구조 및 서명 자체 (signerInfos 부) 이제해야 할 일은 가지고있는 데이터에서 ASN.1 구조를 만드는 것입니다. 서명에 사용 된 알고리즘을 아직 모르는 경우 외부 서명 소프트웨어의 운영자로부터 해당 정보를 얻을 수 있습니다.
일반적으로 Bouncy Castle은 ASN.1 인코딩에 적합하며 일반적으로 CMSSignedData
개체 (CMSSignedDataGenerator)를 템플릿으로 사용하는 Bouncy Castle의 소스 코드를 사용할 수 있습니다.
아주 좋은 접근 방법입니다. 나는 Bouncy Castle 클래스를 템플릿으로 사용하는 것에 대해 말한 것을하기 시작했지만 조금 어려웠습니다. 그렇다면 내가 원하는 것을 구현하는 [j4sign] (http://j4sign.sourceforge.net/)이라는 라이브러리를 발견했습니다 (Bouncy Castle을 사용함). – banshee20
@ banshee20 예, BC는 사용하기가 쉽지 않습니다. ASN.1에 대한 경험이 거의 없으면 코드의 문서화가 잘되어 있지 않으며 읽기가 어렵습니다. 다른 한편, 포괄적이고, 잘 테스트되었으며, 당신이 어떻게 알고 있다면 거의 모든 것을 할 수 있습니다. 어쨌든 귀하의 문제에 대한 쉬운 해결책을 찾은 것을 기쁘게 생각합니다. – Omikron