2017-12-05 18 views
2

OneDrive와 동일한 방식으로 XOrHash를 계산하므로 OD4B 백엔드와 동기화해야하는 변경 사항을 감지 할 수 있습니다. OneDrive XOrHash를 C#으로 계산하는 방법

은 내가 XOrHash 알고리즘에 대한 현재의 구현은 여기 https://docs.microsoft.com/en-us/onedrive/developer/code-snippets/quickxorhash

발견 그러나 내가 OD4B이 우리에게 제공 해시에 맞게 우리의 코드에서 동일한 해시를 계산하는 방법을 제안하는 거기에 아무것도 할 수있는 사용합니다.

위의 링크에서 제공된 XOrHash 알고리즘을 사용하여 일반적인 길이가 20 바이트 인 해시에 대한 바이트 배열을 제공합니다. 우리는 일치하지 해시는 base64로 문자열이 우리 방법에 대한 https://docs.microsoft.com/en-us/onedrive/developer/rest-api/resources/hashes

모든 예제 코드 또는 힌트 것을 사용하기 위해 제안하는 다음 페이지 이상이 다른에있는 모든 문서를 찾을 수 없습니다하는 분명히

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=" 

해시를 계산해야하고 문자열을 반환하면 많은 도움이됩니다. 예를 들어 파일에

링크 : 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} 
+2

(지금은 기대와 실제 한 해시하지만, 파일 없음) – Evk

+0

위의 해시를 계산하는 데 사용한 예제 파일에 대한 링크를 추가했습니다. –

답변

4

이렇게함으로써 : 당신이 실제로 당신의 빠른 XOR 알고리즘을 사용하지 않는

XOrHash.Create() 

. Create()은 정적 메서드 인 HashAlgorithm 클래스이며 일부 기본 해시 알고리즘 인스턴스 (내가 기억하는 것처럼 SHA1)를 만듭니다. 그래서 당신이 실제로 호출하는 것은 :

HashAlgorithm.Create() 

대신에, 이런 식으로 작업을 수행합니다

예상과 실제 해시와 샘플 파일 (작은 일)를 추가 가치
using (var quickXor = new XOrHash()) 
+0

와우 어떻게 그리워 했습니까? 고맙습니다. Evk :) Create on HashAlgorithm은 기본적으로 SHA1 인스턴스를 제공합니다. –