在打印的JavaScript代码中隐藏消息(待查找)

Hiding a message (to be found) in printed JavaScript code

本文关键字:消息 查找 隐藏 打印 JavaScript 代码      更新时间:2023-09-26

我曾被一家网络公司要求为他们提供大约30行HTML/javascript代码,用于墙壁显示。该代码需要是一段真正有效的代码,可以在现代浏览器中执行,并显示大约30个单词或更少的消息(例如,公司的聪明/厚颜无耻的品牌信息)。

一个大的document.write()语句可以做到这一点,但他们正在寻找一些更能隐藏信息的东西。从本质上讲,他们希望制作一个视觉谜题,对没有中级JS理解的人隐藏他们的信息。

对于一个外行来说,它应该只是看起来像随机代码。

我正在寻找如何做这件事的想法/建议。我尝试过使用自动javascript迷你器或模糊器在线,但这些通常输出的代码是完全不可读的人类,我想要的是它是难以为人类/编码员阅读,但不是不可能的

假设要隐藏的信息是:

"爱你,爱你,爱你。"Praesent这就是ipsum ipsum。妊娠前妊娠前妊娠。"

我该怎么做呢?

HTML/CSS, JS &

(版主,如果这个问题不适合堆栈溢出,请把这个问题移到更合适的地方)

听起来像是一个有趣的编程挑战,除了有效的HTML/JS/CSS之外,还需要针对人类代码解释器。

一个想法是以某种混乱或碎片(可读)的形式显示消息,然后显示一些解码消息的代码。一个简单的例子:

var a = [" consectetur", 
         "dolor", 
         "Lorem ipsum ", 
         " sit amet,"];
return a[2] + a[1] + a[3] + a[0];

通过在其他(可能不相关的代码)中分散/隐藏相关的字符串片段,使用条件来确定要连接的变量,让相关的数组索引由一些计算/函数调用或逻辑分支的结果决定,等等,可以使这变得更加困难(并且具有挑战性)。

编码消息不太明显(但仍然可以从代码中读取)的示例:

<script id="codeblock">
  
  //JavaScript
  function getHTML(id) {
    return document.getElementById(id).innerHTML;
  }
  
  var myFavorites = [
    'No Woman No Cry',
    'Exodus',
    'Is This Love',
    'Buffalo Solder',
    'Could You Be Loved'
  ];
  
  var didYouGetTheMessage = (function(letters){
    var x = letters.split(''),
        y = myFavorites,
        z = getHTML('codeblock').split(''/'/')[1];
    x.reverse();
    return [x[17],
            y[2].slice(-4), 
            z.slice(0, 10)]
    .join(' ');
  })('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
  
  //If you still did not get it ...
  console.log(didYouGetTheMessage);
  
</script>

我想,实现这一目标的挑战在于找到一个人在阅读代码时能够理解的困难和有趣之间的平衡,而不是需要花费太多精力的东西。

如果您希望隐藏对正在查看页面源代码的人可见的确切消息,您可以加密字符串并将其(硬编码)存储在脚本中的一个变量中。你可以在需要展示的时候解密它。这样,如果有人查看源代码,他们就不会看到您显示的确切句子。然而,熟悉JavaScript的人仍然能够看到你在做什么编程来显示它。