正确的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);
答
它看起来像你的十六进制数是16字节。它是一个GUID?如果是这样,你可以这样做:
var id = Guid.Parse("b4002e70b6cb73b1093d83e2b8e6c733").ToByteArray();
使用Encoding.ASCII.GetBytes
肯定是不对的,因为这将让你byte
每char
,对应于该字符的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参考):
代码请.... – 2014-12-02 17:39:15
完成。请参阅修改。请删除倒票...? :-) – Corstiaan 2014-12-02 17:46:10
一个完全可重复的例子将是最好的。 – 2014-12-02 17:46:48