C# : SignedXml을 이용한 ds:Signature만드는 방법
1. signedXml의 설명
ds:Signature을 만드려면 우선 signedXml 클래스를 참조해야합니다.
Namespace:System.Security.Cryptography.Xml
Assembly:System.Security.dll
만약 생성자가 계속 생성되지 않는다면 위의 어셈블리와 네임스페이스를 적용했는지 확인해주세요.
SignedXml Class (System.Security.Cryptography.Xml)
Provides a wrapper on a core XML signature object to facilitate creating XML signatures.
docs.microsoft.com
2. 예제코드 참고
<Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>Base64EncodedValue==</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>AnotherBase64EncodedValue===</SignatureValue>
</Signature>
하지만 여기서 우리가 원하는것은 <Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
이렇게 나오는것이 아닌 <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 이렇게 나오길 원합니다.
근데 다른 블로그분이 정리한 내용을 읽어보니 서명작업은 대상 데이터를 입력으로 삼는 것이지 대상 데이터를 서명한 것을 포함한 그걸 또 서명하는 것이 아니기에 XML 데이터를 서명하는 경우 대상 XML 데이터를 정규화한 후 그것을 서명해서 덧붙이는 것이라고 합니다. 결론은 대상 XML 데이터만 바꾸지 않으면 서명으로 포함되는 정보 <Signature />는 적법한 XML이기만 하면 된다고 합니다.
3. Xml표현식으로 변경
XmlElement xmlDigitalSignature = signedXml.GetXml();
xmlDigitalSignature.Prefix = "ds";
4. 참고링크
.NET Framework: 541. SignedXml을 이용한 ds:Signature만드는 방법
.NET Framework: 541. SignedXml을 이용한 ds:Signature만드는 방법 [링크 복사], [링크+제목 복사] 조회: 7349 글쓴 사람 홈페이지 첨부 파일 부모글 보이기/감추기 SignedXml을 이용한 ds:Signature만드는 방법 다음과 같은 질문이 있군요. SignedXml을 이용한 ds:Signature만드는 방법좀 알려주세요. ; https://social.msdn.microsoft.com/Forums/ko-KR/50
www.sysnet.pe.kr