隐藏/加密字符串的本机选项?

时间:2014-12-19 22:15:23

标签: javascript string encryption

作为练习,我一直致力于复制this game。如果它变得无法访问,游戏的前提是通过交换字母对(例如将A替换为M,反之亦然)来加扰,并将其解读为原始排列。

在我学习这个游戏时,我意识到从源头提取解决方案几乎是微不足道的 - 你可以设置任意数量的断点来访问它。我一直试图找到一种方法来掩盖字符串,使其不能立即访问,我唯一可以想到的是在引用之前有某种本机模糊功能有机会降落变量。像这样:

var litmus, quotes = [
    "String One",
    "String Two",
    ....
    "String n",
];

litmus = obscureString(quotes[Math.floor(Math.random()*(n-1))]);

通过这种方式,用户无法召唤原始报价,甚至是使用的随机整数 - 它们在断点发出之前就消失了。

我的问题是:在上面的例子中,是否有任何类型的本地函数适合obscureString()的作用,甚至是松散的?我知道JavaScript没有任何本机加密/哈希方法,并且提供该功能的任何libraries只提供删除断点的机会。因此,我希望有人能够提出一种创造性的方式来原生地模糊字符串,如果它甚至可以在JS中使用。

1 个答案:

答案 0 :(得分:0)

对它进行了一段时间的碾压,我找到了一个非常临时解决方案。

我能找到的唯一本机(读取:非用户可破坏的)转换/哈希函数是window.btoa。它完全符合我的需要,让我在用户有机会获得它之前隐藏字符串。然而,问题是它有一个对应window.atob,其唯一目的是扭转这一过程。

为了解决这个问题,我能够使用以下代码行来中和window.atob,基本上使window.btoa成为单程旅行:

window.atob = function(f){ return f; };

不要养成这个习惯。

这是 可怕的 练习,我觉得写它很脏。在这种情况下它是可以通行的,因为我的应用程序很小,独立,并且不需要在其他地方依赖该功能 - 但我不能在良心上推荐这个作为一般解决方案。许多浏览器甚至不会让你首先覆盖原生函数。

只是想发布答案,以防有人发现自己处于需要类似答案的类似情况 - 这可能是我们现在最接近单向本地哈希函数。