正确的MD5哈希解码资源哈希

问题描述:

我想我的标签“哈希”属性找到该值,如“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

它看起来像你的十六进制数是16字节。它是一个GUID?如果是这样,你可以这样做:

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

使用Encoding.ASCII.GetBytes肯定是不对的,因为这将让你bytechar,对应于该字符的ASCII值。你想要一个byte每两个char(十六进制解码)。

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参考):