C# 如何在C中计算OneDrive XOrHash#

C# 如何在C中计算OneDrive XOrHash#,c#,hash,office365,onedrive,C#,Hash,Office365,Onedrive,我们希望以与OneDrive相同的方式计算XOrHash,以便检测与OD4B后端同步所需的任何更改 我使用了XOrHash算法的当前实现,可以在这里找到 然而,没有什么可以建议我如何在代码中计算相同的散列来匹配OD4B提供给我们的散列 我们使用上面链接中提供的XOrHash算法为散列提供字节数组,该散列的典型长度为20字节 public static byte[] ComputeHash(string filePath) { using (var quickXor = XOrHash.C

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

我使用了XOrHash算法的当前实现,可以在这里找到

然而,没有什么可以建议我如何在代码中计算相同的散列来匹配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字符串的页面之外,我们无法在此页面上找到任何文档

任何关于如何计算散列然后返回字符串的示例代码或提示都将不胜感激

链接到示例文件:

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
类的静态方法,它创建一些默认的hash算法实例(我记得是SHA1)。所以你实际上是在说:

HashAlgorithm.Create()
相反,要这样做:

using (var quickXor = new XOrHash())

值得添加带有预期和实际哈希值的示例文件(小文件)(现在您有预期和实际哈希值,但没有文件)我添加了一个指向用于计算上述哈希值的示例文件的链接哇,我怎么会错过这个!谢谢你Evk:)你是对的,createonhashalgorithm默认会给你一个SHA1实例。