印象笔记中的笔记文本加密数据结构

In note text encrypted data structure in Evernote

我是几个 evernote 扩展的作者,我不想使用加密文本,在我这边创建它们并使用 enml 结构和加密添加到笔记中。

但是,我无法弄清楚加密 CDATA 的结构。

如果您在导出笔记后查看 .enex 文件,加密文本的 enml 元素如下所示:

<en-crypt hint="My Cat's Name">NKLHX5yK1MlpzemJQijAN6C4545s2EODxQ8Bg1r==</en-crypt>

我已经看完了 https://help.evernote.com/hc/en-us/articles/208314128-What-type-of-encryption-does-Evernote-use 这解释了密钥是用 PBKDF2 派生的,加密是用独特的 salt aes-cbc 256 位方法完成的,但是,看看上面的例子,我无法弄清楚数据是如何存储在那里的。

如果我没记错的话,有两种独特的盐和一种 IV,以及存储在那里的加密文本。所以我的问题是,如何利用该块?可能有一种标准方法可以将所有这些信息存储在一个 base64 块中。但我不是加密专家,因此不胜感激。

谢谢。

对于旧的基于 RC2 的加密(如果您的 <en-crypt> 标签没有 cipher="AES" 属性,这是基于 RC2 的加密),算法大致如下所示:

decodedString = RC2.decrypt(Base64.decode(encodedString), MD5.hash(UTF8.encode(passphrase)), 64);

在解码字符串中,字符串的前 4 个字符是解码字符串其余部分的 CRC32 upper-byte 的 HEX-representation。

一个警告:在计算 CRC32 时,您可能需要使用 -1 (0xFFFFFFFF) 对其进行异或,因为在野外有不同的 CRC32 实现可能会也可能不会执行此最终异或.