更正MD5哈希以解码资源哈希值

时间:2014-12-02 17:36:36

标签: c# hash evernote

我正在尝试解码我​​在标签中找到的值" hash"属性,像" b4002e70b6cb73b1093d83e2b8e6c734",到一个字节数组,所以我可以正确调用noteStore.getResourceByHash方法。现在我不断收到EDAMNotFoundException错误,所以我猜我没有正确计算哈希值。

有没有人已经弄明白了?

这是代码。我尝试了很多不同的方法。这是目前的状况:

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);

2 个答案:

答案 0 :(得分:1)

看起来您的十六进制数是16个字节。它是GUID吗?如果是这样,你可以使用它:

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

使用Encoding.ASCII.GetBytes肯定是不对的,因为这样会得到bytechar,对应于该字符的ASCII值。您希望每两byte char(十六进制解码)。

答案 1 :(得分: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来获取具有属性resources的注释对象,该属性包含Resources列表,每个属性具有GUID属性。此GUID可用于调用以下任何方法(每个方法都链接到Evernote API参考):