【问题标题】:Correct MD5 hash to decode resources hashes正确的 MD5 哈希以解码资源哈希
【发布时间】:2014-12-02 17:36:36
【问题描述】:

我正在尝试将在标签“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);

【问题讨论】:

标签: c# hash evernote


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    印象笔记通过资源的 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 引用该资源可能是您的最佳选择。

    您可以调用@987654321@ 方法来获取注释对象,该对象将具有resources 属性,其中包含@987654322@ 列表,每个具有属性GUID。此 GUID 可用于调用以下任何方法(每个方法都链接到 Evernote API 参考):

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      相关资源
      最近更新 更多