2013-06-20 2 views
1

저는 지금 일주일 내내이 문제로 어려움을 겪고 있으며 누군가 나를 도울 수 있기를 바랍니다..Net 4.0 C# SHA256 키를로드 할 때 SignatureAlgorithm이 SHA1로 변경됩니다.

SHA256 및 xmldsig를 사용하여 xml에 서명해야합니다. 이를 위해 SignedXML 클래스를 사용합니다. 이 클래스를 살펴보면로드 된 키의 SignatureAlgorithm 값을 사용하여 사용할 해싱 유형을 결정할 수 있습니다.

인증서 파일로드를 통한 인증서 저장소를 통해 키를로드하는 방법과 상관없이 SHA1이 SignatureAlgorithm으로 표시됩니다. MMC 인증서 저장소에서 내 인증서의 세부 정보를 조회하면 SHA256이 SignatureAlgorithm으로 표시됩니다.

SHA256 cert 키를 생성하기 위해 openssl과 makecert를 모두 시도했지만, 모두 Net에서 SHA1로로드됩니다. 그래서 signedXml.ComputeSignature(); SHA1을 SignatureMethod로 사용합니다.

.Net 4.0은 SHA256을 올바르게 지원해야합니까?

+0


여기를 보라 : http://msdn.microsoft.com/en-us/library/system.security.cryptography.xml.signedinfo .signaturemethod.aspx에서는 SignedXML에서 SHA-1 만 처리 할 수 ​​있습니다. – Dustin

답변

1

잘못된 클래스를 사용하고있는 것으로 나타났습니다.

Microsoft.Web.Services.Security.SignedXml 대신 System.Security.Cryptography.Xml.SignedXml을 사용해야합니다. 후자는 사용한 알고리즘의 SignatureAlgorithm을 사용하여 사용할 알고리즘을 결정하지 않습니다. 이제 알고리즘을 'SignedXml.SignedInfo.SignatureMethod'로 설정하고 SHA1 키를 사용할 수 있습니다.

0

KeyedHashAlgorithm 개체를 선언하고 SHA256 (설명서 here)에 해당하는 문자열을 전달해야합니다.

SHA256 대한 상응하는 문자열 HMACSHA256

그 다음 ComputeSignature 방법이 객체를 전달한다.

다음과 같이 코드가 있어야한다 : KeyedHashAlgorithm kha = KeyedHashAlgorithm.Create("HMACSHA256"); signedXml.ComputeSignature(kha);