2014-12-02 97 views
0

我想我的標籤「哈希」屬性找到該值,如「b4002e70b6cb73b1093d83e2b8e6c734」解碼,爲一個字節數組,所以我可以正確調用noteStore.getResourceByHash方法。現在我不斷得到EDAMNotFoundException錯誤,所以我猜測我沒有正確計算散列。正確的MD5哈希解碼資源哈希

有人已經弄清楚了嗎?

這是代碼。我嘗試了許多不同的方法。這是目前的事態:

System.Security.Cryptography.MD5CryptoServiceProvider test123 = new System.Security.Cryptography.MD5CryptoServiceProvider(); 
byte[] data = System.Text.Encoding.ASCII.GetBytes("b4002e70b6cb73b1093d83e2b8e6c733"); 
data = test123.ComputeHash(data); 
var note = noteStore.getResourceByHash(evernoteToken, noteGuid, data, true, false, false); 
+0

代碼請.... – 2014-12-02 17:39:15

+0

完成。請參閱修改。請刪除倒票...? :-) – Corstiaan 2014-12-02 17:46:10

+1

一個完全可重複的例子將是最好的。 – 2014-12-02 17:46:48

回答

1

它看起來像你的十六進制數是16字節。它是一個GUID?如果是這樣,你可以這樣做:

var id = Guid.Parse("b4002e70b6cb73b1093d83e2b8e6c733").ToByteArray(); 

使用Encoding.ASCII.GetBytes肯定是不對的,因爲這將讓你bytechar,對應於該字符的ASCII值。你想要一個byte每兩個char(十六進制解碼)。

0

Evernote通過資源的GUID或二進制文件流的散列引用資源。

如果您正在尋找獲取資源的散列,您必須將已上傳到Evernote的文件的散列。該代碼可能是這個樣子:

public string CalculateFileHashTotal(string fileLocation) 
      { 
       using (var md5 = MD5.Create()) 
       { 
        using (var stream = File.OpenRead(fileLocation)) 
        { 
         byte[] b = md5.ComputeHash(stream); 
         stream.Close(); 
         return BitConverter.ToString(B).Replace("-", "").ToLower(); 
        } 
       } 
      } 

如果你希望得到的是已經上傳的資源,或者您沒有訪問該文件,通過GUID引用的資源可能會是你最好的選項。

您可以撥打getNote method to get the note object which will have the attribute resources,其中包含Resources的列表,每個列表都具有屬性GUID。此GUID可以用來調用任何下面的方法(每個被鏈接到Evernote API參考):