繁体   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