簡體   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