设计JavaScript中的隐形斗篷

    技术2022-07-10  131

    隐写术。 在鼻子下藏东西的艺术。 只要人类还活着,我们就一直在试图隐藏事物-无论是我们的最后一块披萨还是埋藏的宝藏。 您还记得很酷的隐形柠檬墨水花样吗?我们会在其中写上柠檬的秘密信息,然后加热纸张以揭示主要秘密? 简而言之,隐秘术就是这样,它使我们可以通过隐藏消息的存在来轻松隐藏消息。

    1900年代初期,德国间谍以贸易的名义渗透了法国公民。 但是,他们的目的是观察法国国防系统的细节,并帮助德国人入侵法国。 精心设计的法国国防系统甚至在每个地区都保持了最高的机密性,这使得一个间谍很难收集所有信息。 这需要多个间谍从每个区域收集信息并共同设计他们的游戏计划。 为了安全起见,必须在当天才与会场进行交流,但是会议如何在一天之内到达所有区域? 他们选择了报纸,但速度很快,但公共渠道却很不安全! 但是德国人已经想到了这一点,他们在当天的天气报告中发布了秘密聚会地点。

    拿每个单词的第一个字母以及我们能得到什么-会议地点

    “ New Rue des Thermopyles Heil Hitler” !。

    那时是不可见墨水,现在是不可见字符。

    如今,在信息时代,最重要的交流场所是互联网。 诸如Messenger,Whatsapp,iMessage之类的消息传递应用程序,以及Twitter,Facebook,Instagram等社交媒体。 我们如何在这里应用相同的问题并立即解决? 好吧,我们可以从零宽度的‌字符开始。

    “复制我‌‌‌‌‌”-将此报价粘贴到https://www.textmagic.com/free-tools/unicode-detector中,以查看ZWC始终隐藏在您面前。

    零宽度字符是非打印字符,是Unicode表的一部分。 顾名思义,他们甚至不展示自己的存在。 它们用于启用长行换行,连接表情符号,将两个字符组合成连字,阻止它们联接等。

    字符zwj加入了表情符号,但不可见

    这些角色越来越多地在文本隐藏中找到了自己的方式,它们的完全隐形性是一个了不起的卖点。 由于它们在多种语言和表情符号中不可或缺,因此无法阻止它们。 而且,事实证明,例如ZWC并不是唯一不可见的字符。 看不见的分隔符— U + 2063。

    包含最常用的不可见字符的表。

    这个桌子有一个小问题 Gmail会阻止U + 200B(零宽度空格)。 更不用说,Twitter以将不必要的不​​可见字符列入黑名单而闻名,除U + 200C,U + 200D和U + 180e以外,表中的所有字符均无效。 现在我们有了三个字符!

    哦,等等,U + 180e不是不可见的,并且在iOS设备上呈现异常。 我们现在只有2个字符。

    撕开Unicode表,测试每个可能的不可见字符的跨平台/网络不可见性,我们可以向我们的军械库中再添加4个字符,现在总共可以使用6个不可见字符将我们的秘密隐藏在字符串中。

    const zwc = ['‌', '‍', '⁠', '⁢', '⁣', '⁤'] // 200c,200d,2060,2062,2063,2064 The digital equivalent invisible ink

    现在要使用不可见墨水,我们需要做的是一个秘密的“ hi”,我们需要用二进制表示它,即01101000011010001。然后取4ZWC并将其映射到两位真值表,即00-200c ,01-200d,10-2060,2062-11。使用真值表将二进制文件转换为不可见的流,并将其嵌入任何地方的任何封面消息中。

    加密隐藏内容

    如果入侵者以某种方式检测到隐藏字符的存在并试图强行迫使真相表破解秘密,该怎么办?

    这是Kerckhoff的原理所在:

    理想的密码系统应该是安全的,即使该系统的所有内容(除了密钥之外)都是公开的。

    因此,我们需要某种密钥来锁定我们的秘密。 为此,可以使用基于密码的密钥生成功能来生成一个强大的密钥,该密钥又可以用来加密我们的消息。 具有随机IV和盐值的AES-CTR流密码可用于加密隐藏的秘密,因为它具有不像块密码那样不需要填充的附加优点,因为它增加了消息的长度。

    压缩

    既然我们在加密方面做了大量工作,我们肯定需要最大的压缩率。

    如您所见,即使我们有六个ZWC字符,也只能使用4个字符,因为6不是2的幂。两个额外的字符(U + 2063,U + 2064)可以用来做一层抽象的霍夫曼压缩减少冗余。 将机密转换为ZWC后,将确定流中两个重复最多的ZWC,例如U + 200D和U + 2060。 现在,每两个连续出现的U + 200D和U + 2060可以替换为一个U + 2063或U + 2064。 由于经常观察到冗余,因此可以节省很多。

    现在,我们有两个压缩层,可以充分利用6个不可见字符! 太棒了!

    因此,结合所有这些,我的两个朋友和我构建了StegCloak,这是一个纯JavaScript隐写模块,以功能编程风格设计,以实现上述目的。

    这是它的快速演示:

    我们希望您和我们一样喜欢它!

    在Github上检查StegCloak或访问https://stegcloak.surge.sh 。

    .x-secondary-small { display: none; } @media only screen and (max-width: 600px) { .x-secondary { max-height: none; } .x-secondary-large { display: none; } .x-secondary-small { display: block; } }

    翻译自: https://davidwalsh.name/javascript-steganography

    相关资源:25个经典网站源代码
    Processed: 0.018, SQL: 9