明文

未加密的、人类可直接阅读的文本数据。

明文 (纯文本) 是指未经加密或特殊编码处理、可直接阅读的文本数据。该术语用于两个语境:在加密领域指加密前的原始数据,在文本处理领域指不包含格式信息 (字体、颜色、布局等) 的纯字符串数据。

从安全角度看,以明文形式存储或传输密码和个人信息是重大风险。在数据库中以明文存储密码,一旦发生数据泄露,所有用户的密码会立即暴露。现代最佳实践是先用 bcrypt 或 Argon2 等哈希函数将密码不可逆地转换,然后再存储。此外,在通信路径上也不使用明文的 HTTP,而是使用 HTTPS (TLS) 加密收发数据,这已成为标准做法。

在文本处理的语境中,纯文本指完全不包含格式信息的纯粹文本数据。扩展名为 .txt 的文件是典型代表,与 HTML、Markdown、富文本 (RTF)、Word 文档 (.docx) 等带格式的文本形成对比。纯文本可以用任何文本编辑器打开,也便于程序处理。配置文件、日志文件、CSV 数据等,许多系统都以纯文本格式为基础。

一个常见的误解是认为"纯文本 = 仅限 ASCII"。实际上纯文本依赖于字符编码,以 UTF-8 编码的纯文本同样可以包含日文和表情符号。关键在于有无格式信息,而不是字符种类的限制。同时,纯文本自身并不具备表明它由哪种编码写成的机制,因此接收方一旦推测错误就会出现乱码。交接文件时事先约定好编码与换行符,是实务上的惯例做法。

理解纯文本与 Markdown 的关系也很有帮助。Markdown 是在纯文本之上加入轻量级格式记法,其特点是保持原样也能供人阅读。而 HTML 以标签构成的结构化为前提,源代码的可读性不如纯文本。在电子邮件领域,text/plain 与 text/html 两种格式并用,会根据收件人的环境切换显示。

在字符计数方面,纯文本是最简单的计量对象。统计 HTML 文档的字符数时需要先做排除标签的预处理,而纯文本不需要这道工序,可以直接统计文件的内容。

不过,"只要是纯文本,看起来的字符数就与统计出的字符数一致"并不一定成立。没有格式信息与 1 个字符的边界是否自明,是两个不同的问题。表示家庭的表情符号 👨‍👩‍👧‍👦 在 JavaScript 的 length 下算作 11,按码位单位 (Array.from) 算作 7,只有以书写素簇为单位计数的 Intl.Segmenter 才会得出与外观一致的 1。结合字符也是同样,看起来相同的"が"既可能是已合成的 1 个字符 (U+304C),也可能是"か"加上结合字符浊音符 (U+304B U+3099) 这样 2 个字符的形式。纯文本能省掉的只到去除标签为止,计数的单位与规范化形式如何统一,需要另行决定。

分享这篇文章