簡體   English   中英

為什么這個byte []數組不同並且在返回到調用方法時保持一個完全不同的值?

[英]Why this byte[] array is different and holds a total different value when it is returned to calling method?

我正在使用.NET反射器來調試調用WSE3.0服務的控制台應用程序,該服務需要使用用戶名令牌元素對消息進行簽名和加密。 我們的服務提供商使用WSE,因此如果我需要使用非.net客戶端,我需要使用它或復制相同的簽名和加密邏輯。 要了解實際的消息簽名是如何發生的(以便我可以使用NON .NET客戶端進行復制),我使用.NET反射器來調試代碼。

MessageSignature.BuildSignedInfo調用HMACSHA1SignatureFormatter.Sign,它實際對消息進行簽名,並將一個byte []數組的hmac返回給MessageSignature.BuildSignedInfo。 以下是兩種方法

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);
}

這就是字節數組在監視窗口中的樣子。

在HMACSHA1SignatureFormatter的符號方法中觀察窗口

在HMACSHA1SignatureFormatter的符號方法中觀察窗口

在MessageSignature.BuildSignedInfo中查看返回的byte []數組的窗口(這稱為sign方法獲取byte []數組)

在Buildsignedinfo方法中觀察窗口

我正在逐步完成代碼,並且沒有在它們之間調用的中間方法。 有什么理由會發生這種情況嗎?

一些可能性:

  1. 也許ComputeHash沒有倒帶流,所以QuickWatch窗口的第二次調用會對流的不同部分進行哈希處理? 檢查每次通話前后的stream.Position。

  2. 如果您正在逐步使用反編譯的Microsoft代碼,那么該代碼可能已經過優化,有時可能會重新排序調用。 當您逐步執行該方法時,可能實際上還沒有調用散列函數,或者結果不在您認為的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM