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

本文关键字:哈希 资源 解码 更正 MD5 | 更新日期: 2023-09-27 18:32:47

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

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

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

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

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

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

  • 获取资源
  • 获取资源替代数据
  • 获取资源应用程序数据
  • getResourceApplicationDataEntry
  • getResourceAttributes
  • 获取资源数据
  • 获取资源识别
  • getResourceSearchText