.NET Reflector를 사용하여 사용자 이름 토큰 요소를 사용하여 메시지를 암호화하는 &에 서명해야하는 WSE3.0 서비스를 호출하는 콘솔 응용 프로그램을 디버깅하는 중입니다. 우리의 서비스 제공 업체는 WSE를 사용하므로 non .net 클라이언트를 사용해야하는 경우이를 사용하거나 서명 및 암호화의 동일한 로직을 복제해야합니다. 실제 메시지 서명이 어떻게 발생하는지 (NON .NET 클라이언트를 사용하여 복제 할 수 있도록) .NET Reflector를 사용하여 코드를 디버깅했습니다.왜이 byte [] 배열이 다르고 호출하는 메서드에 반환 될 때 총 다른 값을 보유합니까?
MessageSignature.BuildSignedInfo는 실제로 메시지에 서명하고 byte [] 배열 인 hmac를 MessageSignature.BuildSignedInfo에 반환하는 HMACSHA1SignatureFormatter.Sign을 호출합니다. 아래 는이 방법
private byte[] BuildSignedInfo(SignatureFormatter formatter)
{
this.SignedInfo.SignatureMethod = formatter.AlgorithmURI;
return formatter.Sign(this.CanonicalizeSignedInfo());
}
public override byte[] Sign(Stream data)
{
HMACSHA1 hmacsha = new HMACSHA1(this._key);
return hmacsha.ComputeHash(data);
}
이 바이트 배열은 시계 창처럼 모습입니다이다.
MessageSignature.BuildSignedInfo (에 그 반환 바이트 [] 배열의 HMACSHA1SignatureFormatter
시계 윈도우의 표시 방법에
조사 식 창이 바이트를 얻기 위해 그 기호의 메소드를 호출 [] 배열)
나는 코드를 단계별로 실행 중이며, 중간 단계의 메소드가 없다. 그 일이 일어날 이유가 있을까요?
QuickWatch를 사용하면 값을 다시 계산할 수 있습니다. 재평가 버튼을 시도해보십시오. 매번 다른 값을 반환 할 것입니다. 대부분의 Hashers는 statefull입니다. –
나는 이것을 시도했지만 해시 값을 변경하지 않았다. – iRamesh
그럼 나도 몰라. 코드를 소유 한 경우 디버깅을 더 쉽게 (더 안정적으로) 만들기 위해 몇 개의 중간 변수를 삽입하십시오. –