【发布时间】:2010-09-25 14:59:34
【问题描述】:
我希望在页面上放置一些文本并在该文本中隐藏一些数据。有谁知道过去曾用于解决此问题的任何方法/模式?
示例:我有以下文字: “猫坐在狗身上,很开心。”
我也有数字 123。我想在那个句子中隐藏这个数字,这样句子就可以放在网页上,只有知道的人才能找到数据。
【问题讨论】:
标签: algorithm design-patterns steganography
我希望在页面上放置一些文本并在该文本中隐藏一些数据。有谁知道过去曾用于解决此问题的任何方法/模式?
示例:我有以下文字: “猫坐在狗身上,很开心。”
我也有数字 123。我想在那个句子中隐藏这个数字,这样句子就可以放在网页上,只有知道的人才能找到数据。
【问题讨论】:
标签: algorithm design-patterns steganography
当然可以。
您所描述的是一个广泛的描述,称为Steganography。
例如,您可能会以这样一种方式对数字进行编码,即计算单词的数量,直到看到字母 B,在这种情况下,123 可以编码为:
You belong to the beautiful group of people being elite.
问题是,想要解码您的消息的人必须知道您的算法。
编辑我注意到我的号码差了一位。从 0 开始计数,您会看到数字 123。
【讨论】:
实际上,HTML 使执行此操作变得非常容易。不需要真正狡猾的隐写术等。让我们看看:
这句话嵌入123,然后停止嵌入。
这句话嵌入0102,然后停止嵌入。
(我们必须看看它在 Markdown 中是否真的有效,但我怀疑是这样。)诚然,如果你知道有 something 需要寻找,那是很明显的,但我认为你会同意这对不经意的观察者来说并不明显。
我把它作为一个小谜题来制定方案,但如果你想明确解释,请添加评论。
【讨论】:
解决这个问题有非常复杂的方法,但是您可以选择一个非常简单的方法。例如。为每个数字定义一个形容词:
0. beautiful
1. harmless
2. evil
3. colorful
4. weird
等等。现在选择您选择的句子并将占位符放入形容词所属的句子中。
"The {adj} cat sat on the {adj} dog and the {adj} cat was happy."
你的号码是123,所以你的句子是
"The harmless cat sat on the evil dog and the colorful cat was happy."
解析器可以轻松获取句子,将其拆分为单词,在上表中找到形容词,然后将它们转换回数字。
The -> ?
harmless -> 1
cat -> ?
sat -> ?
on -> ?
the -> ?
evil -> 2
:
最后你又得到了 123。
一旦人们知道句子中隐藏着信息,算法就很容易被破解。如果您通过为每个数字定义多个形容词来添加变体,则可以使其更难中断。而不是
1. harmless
你可以定义
1. harmless/stupid/blue/fashionable
当你需要编码 1 时,随机选择上面的任何一个词。由于这些都映射到数字 1,反向解析器不会关心其中打印了哪些单词,结果将始终为 1。这种随机化将使算法更难逆向工程。
【讨论】:
我认为你所说的高层次是隐写术。 http://en.wikipedia.org/wiki/Steganography
现代技术部分应该可以帮助您入门:http://en.wikipedia.org/wiki/Steganography#Modern_steganographic_techniques
【讨论】:
我认为您正在寻找的是一种叫做隐写术的东西。 Corinna John 在 CodeProject 上有大量关于该主题的文章。
http://www.codeproject.com/script/Articles/MemberArticles.aspx?amid=475133
【讨论】:
可能有一种算法可以将该句子变成 123,但我认为一般来说,如果您需要存储任何可能的数值,您将需要接受对文本的一些修改!
【讨论】:
如果“文本”实际上是图像,那么您可以使用 steganography 隐藏其中的数据 - 数据隐藏在二进制图像文件中,而不会影响图像的外观。
【讨论】:
据此thread:
教授。 Mikhail Atallah 等。人。普渡大学对 watermarking text 进行了大量研究。
该方法使用短语的 TMR (Text Meaning Representation) 对位进行编码,方法是执行较小的转换,将 TMR 定位在与定义的规范形式一定距离处。
(另一种给文字加水印的方法是presented here)
这可能是另一种在文本中隐藏文本的方法,以及其他答案中描述的隐写术方法。
【讨论】:
Jon Skeet 提到的方法与 Matthew Kwan 的“SNOW”方法非常相似。它们都在文本中隐藏少量任意信息,而不添加、删除或更改源文本中的任何单词。 两者都将秘密信息编码在通常不相关、通常不可见的空白中—— 单词之间和行尾的额外空格和制表符。
【讨论】:
这是一个将加密数据转换为“自然”文本消息的原型。
http://herosys.net/w/project/text-steganography-hide-text-in-spam-sms
将“明天早上 8 点在大学东门见你”等源文本转换为看起来像垃圾邮件的短文本消息。
“有史以来最好的房子!你千万不要错过它。1000-3000 平方英尺。每平方英尺 15-80 美元。请致电 123-456-7890”。
算法是你只需创建一个语法图,并为每个单词创建一个候选表。就像 BASE64 一样,但索引表会根据您预定义的上下文进行更改。
【讨论】:
好吧,您可以尝试类似this...不过,不确定这是否正是您想要的。
【讨论】:
我有两个方案具有良好的安全性,但要权衡相当低的隐写嵌入率。其中一个非常简单,但对于任意用户给定的文本,每行的嵌入率只有 1 位,而另一个需要用户在软件的指导下编写封面文本,嵌入率在 [0.5 , 1.0] 每字。查看我的主页 mok-kong-shen.de
【讨论】: