我们如何对您的数据进行加密?

这是我们的详细加密方法,仅使用业界公开算法,这意味这您可以脱离 LocalFileEncrypt.com 自行解密,您的加密数据永远由您完全掌握(前提是您记得密钥!)

您的数据始终由您掌握

加密过程分为三步:

  1. 记录元信息,这是为了记录原始文件类型及必要的加密操作元信息。
  2. 加密原始数据,使用 AES-256-GCM 算法对原始数据进行加密。
  3. 合并元信息及加密数据,将元信息和加密数据合并为一个文件。

1. 记录元信息

元信息是一个 JSON 对象,包含以下字段:

{
    version: number;
    type: "0" | "1" | "2";
    ext?: string
}

它们的含义如下:

字段名数据类型是否可选描述
versionnumber执行加密的 LocalFileEncrypt.com 版本号,它是用于标识加密过程的版本,目前固定为 1
type“0”、“1”、 “2”加密目标类型,“0” 表示加密文本;“1” 表示加密文件;“2” 表示加密文件夹
extstring加密文件的扩展名,只有在 type 为 “1” 时才会存在

例如:加密 foo.txt 文件时,元信息是:

{
    "version": 1,
    "type": "1",
    "ext": "txt"
}

2. 加密原始数据

加密原始数据过程与元信息中 version 字段有关,它决定了具体的加密流程。

version 为 1 时(当前版本)

  1. 读取原始文件二进制数据流作为原始数据。
  2. 使用 SHA-256 算法对密码生成 256 位哈希摘要作为 iv。
  3. 使用 PBKDF2 算法将密码转换为基础密钥,该密钥仅被用于派发密钥。
  4. 使用 PBKDF2 算法从基础密钥派发出 256 位加解密密钥,其中哈希算法为 SHA-256,迭代次数 100000 次,盐与密码相同。
  5. 使用 AES-GCM 算法对原始数据进行加密,其中 iv 为第 2 步生成的 256 位 iv,密钥为第 4 步生成的 256 位密钥。

3. 合并元信息及加密数据

合并使用以下步骤:

  1. 将 JSON 元信息转化为字符串形式。
  2. 创建二进制缓冲区。
  3. 缓冲区顺序写入 8 字节,内容为 ’l0kfd3e1’,表示这是一个 LocalFileEncrypt.com 加密文件,该值永远不变。
  4. 缓冲区顺序写入 4 字节,内容为元信息字符串长度,大端序。
  5. 缓冲区顺序写入元信息字符串内容。
  6. 缓冲区顺序追加全部加密数据

例如:加密文本,内容:123,密码:123,最终数据的十六进制表示为:

images/example1.png

4. 脱离 LocalFileEncrypt.com 自行解密

正常情况下,您无需担心无法解密经 LocalFileEncrypt.com 加密的数据,我们依靠 Cloudflare 向全球提供高可用服务。

但您可能仍然希望在没有 LocalFileEncrypt.com 的情况下自行解密数据,确保自己对加密数据的完全控制,为此我们提供了一个 Python 示例程序,它根据前文描述的加密过程实现了数据解密功能,您可以通过下面的方式在本地解密数据:

python3 decrypt.py <file_path> <key>

*注意:该示例程序仅供参考,您可以根据自己的需求进行修改。执行前请确保安装了 Pythoncryptography

5. 更新记录

  • 2025/01/31:新增 version 为 1 时的加密流程

LocalFileEncrypt.com 仍在不断演进,未来可能会添加不同的加密算法、密钥来源,所有流程细节都将在此公开,确保 您的加密数据 在 掌握密钥的情况下,永远不会因为任何不可抗力而无法解密

推荐阅读

为什么我们使用 AES-256-GCM 加密您的数据?

为什么我们使用 AES-256-GCM 加密您的数据?

这是我们选择 AES-256-GCM 加密算法的原因。