[英]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.