encoding - 有没有什么好方法可以将 "encode"二进制数据视为合理的组合词并再次返回?

标签 encoding

给你一个非常简单和糟糕的例子。数据被分成 4 位。 16 个可能的数字对应于前 16 个辅音。您添加一个随机元音以使其可发音。所以“08F734F7”可以变成“ba lo ta ku fo go ta ka”。你可以加入一些音节,加上标点符号和大写,它可以变成“Balo ta kufogo,Taka?”这看起来像是一种似是而非的语言。

为了清楚起见,我并不是要保护二进制数据。

我想在压缩和加密我的(UTF-8)纯文本日记后使用它。生成的二进制数据应该看起来非常随机。我需要将这些数据转换成一种看似合理的语言并能够将其还原。我要在纸上打印“语言”并制作一本定制书。

所以我正在寻找的是将随机数据转换为可读的似是而非的单词的最佳方法。好的我的意思是最大的位字母比(同时使它看起来像一种真正的语言)。在我的示例中,每个字母正好是 2 位。或 4 个字母表示一个字节。

最佳答案

迷人的问题!

到目前为止,我最好的解决方案在 2 到 4 个字符中编码 12 位,每个字母 3 到 6 位。 (星期五不是对字长的不均匀分布进行必要的数学计算的好日子,所以我还没有计算出每个字母的平均位数)。

这个想法是使用以一两个辅音开头并以一两个元音结尾的“音素”。有 21 个辅音,我觉得每个辅音后面都可以跟 h、l、r、w 或 y,而且看起来还是合理的。所以你的音素以 126 个辅音部分之一开始 - b, bh, bl, br, bw, by, c, ch, cl, cr, ..., z, zh, zl, zr, zw, zy(诚然,认为像 yy 和 zl 看起来有点奇怪,但毕竟是外语 :) )

126 非常接近 128,我们可以为最后两个值添加 t' 和 b'(例如)——给我们一个 128 个值的字典,以存储 7 位。您甚至可以添加用 d' 替换 yy,将 zl 替换为 p' 或其他任何内容。

类似地,元音部分可以是单个元音或一对元音。我已经去掉了 aa、ii 和 uu,因为它们对我来说看起来太奇怪了(个人喜好),即使它们确实出现在一些真实的单词中(谁决定“continuum”无论如何都应该这样拼写!)。所以这给出了 27 个可能的元音部分:a, e, i, o, u, ae, ai, ao, ..., ue, ui, uo。

27 接近 32,因此使用重音元音(é、â 等)输入 5 个值。这为我们提供了 5 位以及一些稀疏重音的额外好处。

所以这是 2、3 或 4 个字母中的 12 位。

更有趣的是,如果下一位是 1,则在 90% 的时间(随机)插入一个空格,或者在另外 10% 的情况下插入一个标点符号 - 但如果下一位是 0,则不要插入任何内容 - 只是开始下一个音素。标点符号后的第一个字母大写。

那应该给你类似的东西:

Bwaijou t'ei plo ku bhaproti! Llanoi proimlaroo jaévli。

也许有人可以更进一步。

关于encoding - 有没有什么好方法可以将 "encode"二进制数据视为合理的组合词并再次返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4751668/

相关文章:

java - 如何处理电子邮件主题中的 x-mac-ce 编码

encoding - 维特比解码器

c - 如何将像素数据编码为视频格式?

list - 存储多重集/无序列表的节省空间的方法

audio - 将 -ar 设置为选项时,Ffmpeg 无法正确编码

ruby-on-rails - 直接显示使用 chunkypng 创建的图像(不保存)

encoding - Perforce 和 Jenkins 更改注释编码被破坏

PHP 如何将文本编码为数字实体?

mysql - MySQL 中 utf8mb4 和 utf8 字符集有什么区别?

iOS中文字符串显示?在按钮标签中时