Ente Locker 个人笔记(Personal Notes)完全指南:端到端加密存储、组织与分享
导读
本篇文章围绕 Ente Locker 的「个人笔记(Personal Notes / Note)」信息类型展开,讲解如何在 Ente Locker 中以端到端加密方式存储任意文本——从私密日记、安全提醒到机密会议纪要。读完本文,你将掌握笔记的创建、编辑、组织(集合)、搜索与分享(公开链接 / 协作者共享)的完整实操流程,并了解其背后的数据模型与加密上传机制。
个人笔记是什么
在 Ente Locker 中,Note(个人笔记) 是用于安全存储任意文本内容的信息类型。它适合保存那些不属于其他固定类别的敏感信息——Locker 的其他信息类型包括账户凭据(用户名/密码)、实物记录(卡片/证件)等,而笔记是其中最通用、最灵活的一种。
从数据模型上看,笔记在客户端仅由两个字段构成:标题(title) 与 正文(content)。在 mobile/apps/locker/lib/models/info/info_item.dart 中定义如下:
class PersonalNoteData extends InfoData {
final String title;
final String content;
PersonalNoteData({required this.title, required this.content});
factory PersonalNoteData.fromJson(Map<String, dynamic> json) {
return PersonalNoteData(
title: json['title'] ?? '',
content: json['content'] ?? '',
);
}
@override
Map<String, dynamic> toJson() {
return {'title': title, 'content': content};
}
}
其中 InfoType.note 是 Locker 的四种信息类型之一(note、physicalRecord、accountCredential、emergencyContact,见 info_item.dart)。
典型使用场景
官方文档推荐的笔记用途包括:
- 私密日记条目(private journal entries)
- 安全提醒(secure reminders)
- 敏感的会议纪要(sensitive meeting notes)
- 私人想法与创意(private thoughts and ideas)
- 加密草稿(encrypted drafts)
- 机密信息(confidential information)
由于所有内容在上传前都会经过端到端加密,即使服务端被攻破,攻击者也无法读取你的笔记明文。
创建一条笔记
在 Ente Locker 移动端创建笔记的完整步骤:
- 打开 Ente Locker
- 点击 + 按钮
- 选择 Note(笔记)
- 为笔记输入一个标题
- 在文本框中写入笔记正文
- 选择一个或多个集合(Collections)
- 点击 Save(保存)
背后的实现细节
创建界面由 personal_note_page.dart 中的 PersonalNotePage 驱动,它继承自通用的 BaseInfoPage 基类(base_info_page.dart)。表单包含标题输入框与正文输入框,正文输入框被标记为 isRequired: true,意味着正文不能为空才能保存(校验逻辑见 personal_note_page.dart)。
一个贴心设计:当标题留空而正文非空时,客户端会自动从正文首行生成标题。生成规则是取第一行内容,截取前 5 个单词、最长 40 个字符,超长时以 ... 结尾(见 personal_note_page.dart)。因此在快速记录时,你完全可以只写正文、不填标题。
保存时,笔记会作为 FileType.info 类型的文件上传。其内容被封装进 pubMagicMetadata(可公开元数据),并在客户端加密后再传输到服务端(见 info_file_service.dart):
final pubMagicMetadata = PubMagicMetadata(
info: {'type': infoItem.type.name, 'data': infoItem.data.toJson()},
noThumb: true,
);
如果在保存时未选择任何集合,客户端会自动将笔记放入「未分类(Uncategorized)」集合(见 base_info_page.dart)。
笔记核心功能
富文本内容
笔记支持纯文本内容,并且没有字符数限制——官方明确说明"Write as much as you need - there's no character limit"。正文输入框为多行输入(TextInputType.multiline),查看模式下正文最多可展开到 24 行(见 personal_note_page.dart)。
提示:由于没有字符上限,一篇笔记可以容纳很长的加密草稿或完整日记。相关内容也可参考 FAQ:笔记是否有字符数限制 与 FAQ:笔记能否格式化文本。
组织(集合)
笔记可以通过**集合(Collections)**进行组织,将相关内容归组。例如:
- 创建一个 "Work"(工作)集合,存放与工作相关的笔记
- 创建一个 "Personal"(私人)集合,存放私人条目
在编辑界面底部,你可以通过集合选择器(CollectionSelectionWidget,见 personal_note_page.dart)勾选一个或多个集合,同一篇笔记可以同时属于多个集合。关于集合的完整介绍参见集合(Collections)文档。
保存时的集合归属逻辑值得一提(见 base_info_page.dart):
- 新笔记若未选集合,自动进入「未分类」集合;
- 编辑已有笔记时,如果选中了「收藏(Important)」集合,会通过
FavoritesService同步收藏状态; - 集合变更会通过
CollectionService.sync()与云端同步。
搜索
你可以使用搜索功能快速定位笔记。搜索匹配的是笔记的标题(title)。搜索界面与结果视图的实现参见 item_list_view.dart 与 search_result_view.dart。更详细的搜索能力参见搜索(Search)文档。
编辑笔记
编辑已有笔记的步骤:
- 点击一条笔记将其打开
- 点击编辑按钮(查看模式右上角的铅笔图标)
- 修改内容
- 点击 Save(保存)
编辑状态由 BaseInfoPageState 管理:打开笔记时通过 InfoFileService.extractInfoFromFile 从文件元数据中还原出 PersonalNoteData(见 info_file_service.dart),编辑后通过 MetadataUpdaterService.updateFileMetadata 增量更新元数据;若标题发生变化,还会同时写入 editedName(编辑名)与 editTime 时间戳(见 info_file_service.dart)。
此外,笔记页还内置了未保存更改保护:编辑模式下若标题或正文发生变化,返回时会弹出「放弃更改」确认对话框(hasUnsavedChanges 逻辑见 personal_note_page.dart),避免误触返回丢失内容。
分享笔记
笔记支持两种分享方式:
方式一:通过公开链接分享单篇笔记
- 长按要分享的笔记
- 点击分享按钮
- 点击 Share link(分享链接)
这会生成一个公开分享链接(share link),任何获得链接的人都可以访问这篇笔记。链接管理界面由 share_link_sheet.dart 实现,支持创建、复制与删除分享链接,删除时需二次确认;其网络请求封装在 links_client.dart(如 DELETE /files/share-url/{linkID})。公开链接的更多能力(密码保护、设备限制、过期时间等)参见公开链接(Public Links)文档。
方式二:与其他 Ente 用户共享
要把笔记共享给另一位 Ente 用户,请将该笔记加入某个集合,并共享该集合——笔记会随集合一起被共享给协作者。集合共享的详细说明参见共享(Sharing)文档与与用户共享(Share with users)文档。
与其他信息类型的对比
| 信息类型 | 核心字段 | 适用场景 |
|---|---|---|
| 个人笔记 Note | title + content | 任意自由文本,无固定结构 |
| 账户凭据 Account Credential | name + username + password + notes | 网站/应用登录信息 |
| 实物记录 Physical Record | name + location + notes | 卡片、证件等实物位置 |
| 紧急联系人 Emergency Contact | name + contactDetails + notes | 紧急情况下可联系的他人信息 |
四种类型共享同一套 InfoItem 数据模型(类型标识 + 数据 + 创建/更新时间)与加密上传管线,因此笔记可以随时与其它类型一样被加密、同步、收藏与搜索。参见信息类型总览。
常见问题(FAQ)
关于笔记的常见问题集中在信息类型 FAQ:
小结
Ente Locker 的个人笔记以最简洁的「标题 + 正文」模型,承载了端到端加密的任意文本存储能力:创建零门槛(标题可自动生成)、无字符上限、集合多维组织、标题级快速搜索,并通过公开链接与集合共享两种方式安全分发。其底层实现——PersonalNoteData 数据模型、InfoFileService 加密上传管线、BaseInfoPage 通用编辑框架——共同保证了笔记与其他信息类型一致的加密强度与使用体验。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust4.21 K635- DDeepSeek-V4.1-FlashDeepSeek-V4.1-Flash 是一个多模态混合专家(MoE)模型,拥有 5520 亿骨干参数,并支持最多一百万 token 的上下文长度。该模型原生支持图像和文本输入,并以自回归方式生成文本Python70
jforgamejforgame是一个一站式游戏服务器开发框架。包含游戏服务器开发所需要的各种组件,比如网关,socket服务端与客户端,自定义高效消息编解码,游戏热更新,游戏通用工具等等。包含游戏服,跨服,匹配服,后台管理系统等实现,同时提供大量业务案例以供学习。亦可用于其他socket应用,例如及时聊天等。Java161
fizz-gateway-nodeAn Aggregation API Gateway in Java . FizzGate 是一个基于 Java开发的微服务聚合网关,是拥有自主知识产权的应用网关国产化替代方案,能够实现热服务编排聚合、自动授权选择、线上服务脚本编码、在线测试、高性能路由、API审核管理、回调管理等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界面,能够快速帮助企业进行API服务治理、减少中间层胶水代码以及降低编码投入、提高 API 服务的稳定性和安全性。Java90
certd开源SSL证书管理工具;全自动证书申请、更新、续期;通配符证书,泛域名证书申请;证书自动化部署到阿里云、腾讯云、主机、群晖、宝塔;https证书,pfx证书,der证书,TLS证书,nginx证书自动续签自动部署JavaScript120
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python300