繁体   English   中英

如何在C#中计算OneDrive XOrHash

[英]How to compute OneDrive XOrHash in C#

我们希望以与OneDrive相同的方式计算XOrHash,以便我们可以检测与OD4B后端同步所需的任何更改。

我已经使用了XOrHash算法的当前实现,可以在这里找到https://docs.microsoft.com/en-us/onedrive/developer/code-snippets/quickxorhash

但是,没有什么可以建议我如何在代码中计算相同的哈希值以匹配OD4B提供给我们的哈希值。

我们使用上面链接中提供的XOrHash算法为我们提供哈希的字节数组,其典型长度为20个字节。

public static byte[] ComputeHash(string filePath)
{
    using (var quickXor = XOrHash.Create())
    {
        using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            return quickXor.ComputeHash(stream);
        }
    }
}

 public static string ConvertHexToString(this byte[] bytes)
 {            
     return Convert.ToBase64String(bytes);
 }

returns "4FPisLqvTiuaxUVVz6Zk+RxMClE=" OD4B tells us the hash is "LmpqMT5KKX4ATcd372ZTyVr3gIk="

显然,我们不匹配,除了下面的页面(找不到建议使用哈希值是base64字符串)之外,我们无法在此找到任何文档https://docs.microsoft.com/zh-cn/onedrive/developer/rest-api /资源/散列

任何有关我们应该如何计算哈希然后返回字符串的示例代码或提示,将不胜感激。

链接到示例文件: https : //dnqa-my.sharepoint.com/ : p :/ g/personal/autoslave10_dnqauk_co_uk/EcPZl9l2eXNImfD0paFXKyoBHdZwt5mCMRemLKU9wNYIYg?e=63c7632212d948238dd9696c90a11963

OD4B json

{"@odata.context":"omitted","@odata.type":"#oneDrive.item","@odata.id":"omitted","@odata.etag":"\"{D997D9C3-7976-4873-99F0-F4A5A1572B2A},2\"","@odata.editLink":"omitted","createdDateTime":"2017-12-04T17:07:40Z","id":"omitted","lastModifiedDateTime":"2017-12-04T17:07:40Z","name":"pptx001.pptx","file":{"hashes":{"quickXorHash":"LmpqMT5KKX4ATcd372ZTyVr3gIk="},"mimeType":"application/vnd.openxmlformats-officedocument.presentationml.presentation"},"size":29765}

通过做这个:

XOrHash.Create()

您实际上并没有使用快速异或算法。 Create()HashAlgorithm类的静态方法,它创建一些默认的哈希算法实例(我记得SHA1)。 因此,您实际上要调用的是:

HashAlgorithm.Create()

而是这样做:

using (var quickXor = new XOrHash())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM