如何加密JavaScript代码以使其无法解密?

时间:2010-01-13 23:03:45

标签: javascript encryption

我有一些我需要加密的JavaScript代码,但我想确保没有人可以解密它。

我可以使用哪些工具来执行此操作?

- 编辑 -

我仍然希望在我的网站上运行代码,我只是想确保没有其他人可以解密代码。

13 个答案:

答案 0 :(得分:24)

Javascript代码在浏览器中执行,即在客户端执行,这意味着它必须在客户端未加密。

你能做的“最好的”可能是缩小它,这会让它更难理解 - 而且obfuscation也可能会做一些 - 即使有人真的有动力仍然能够读它。

例如参见YUI Compressor,它可以缩小和混淆JS代码。

答案 1 :(得分:10)

如果您真的想加密它以便其他任何人都无法对其进行解密,您可以使用任意数量的加密之一。例如,要手动执行,您可以使用TrueCrypt;或者以编程方式执行此操作,请使用most languages中提供的加密库。

如果您真正要求的是如何对代码进行模糊处理以便没有人可以对其进行反向工程,答案是:您不能,而不是Javascript或其他任何其他语言。你能做的最好的事就是让反向工程师难以阅读;为此,有许多工具:

答案 2 :(得分:7)

没有办法做到这一点。您可以隐藏它并在其中包含一些域检查代码。或者您可以使用服务器端脚本来检查引用域。

答案 3 :(得分:6)

我认为您将加密已编译的二进制文件混淆。

甚至商用的闭源软件(如Microsoft Office或Adobe Photoshop)都不会加密进行分发。但它们被编译为本机机器代码,这使得它们很难进行逆向工程。

JavaScript没有编译二进制文件这样的东西。但是,随着越来越多的浏览器转向字节码编译以实现更快的性能,我们可能有一天会有一个编译的JavaScript源格式。也许,类似于Python的.py.pyc文件,也许我们会有一个.jsc或JavaScript编译文件,可以以二进制形式传递给浏览器,以便在其JavaScript中运行虚拟机。

尽管如此,还没有这样的事情存在。即使它确实如此,这只是一个更强烈的混淆。混淆可以防止随意复制和共享,但如果您需要真正保护您的知识产权, 移动逻辑服务器端

答案 4 :(得分:4)

没有办法这样做,因为在一天结束时,代码仍然必须在客户端计算机上运行,​​未加密,这意味着解密代码的例程必须与加密代码一起发送。你把锁和钥匙交给他们,所有他们要做的就是转身。

你最好的办法就是通过一个混淆器来运行它,但即使这样,它也不会像有人一样无法自己重写它而无需尝试读取你的代码。

答案 5 :(得分:4)

你想要的是理论上和实际上不可能的。人们会在这里告诉你,这是不可能的,你可能会想“好吧,那是因为没有人足够努力”。不可能。以同样的方式计算线性或恒定时间内的第n个素数是不可能的。以同样的方式停止问题是不可能解决的。 “你的意思是2 + 2不等于5?你的努力程度不够!”

不仅不可能,但是想要这种事情的动机通常都是错误的。尝试使用技术解决从根本上说是法律问题的问题始终是一个根本性的错误。你想保护你的代码免受“海盗”或竞争对手的侵害吗?你不可能写任何特别值得偷窃的东西,但如果你有,并且你不想让人偷走它,那么你唯一真正的追索权就是法治。

然而,在更大的层面上,您的问题可能不会成为竞争对手或海盗窃取您的代码。您的问题将面向商业:通过制作高质量的产品,合适的价格以及充足的营销来赢得观众。你做对了,有人窃取你的代码并不重要。你做对了,拥有“真实原创”似乎具有真正的价值。事实上,如果你发布你的东西开源,它只能真正帮助你,因为那时你有一群有兴趣的业余爱好者可以免费为你工作。盗版和逆向工程实际上是天赐之物,因为这意味着人们对您的产品足够感兴趣,希望改进它。最好的办法是尽你所能让这种情况发生。

如果您的企业确实依赖于保留一些javascript秘密,那么您在第1阶段的业务计划中基本上犯了一个错误。

如果您的公司正在销售一个javascript库(存在这样的东西!),那么您并不比其他任何软件销售商更糟糕。最好的办法是将它推向诚实的企业,这些企业没有给你钱的问题。盗用你的东西的人无论如何也无意向你支付费用 - 并且在根本上处于不利地位,他们没有得到你的技术支持或定期的维护更新。

如果这不是商业努力,那么我真的不知道为什么你甚至打扰。适当的信用?

答案 6 :(得分:3)

虽然雅虎没有实际加密,但雅虎YUI Compressor会压缩和混淆您的JavaScript以供正常使用,并提供更好的压缩JSMin

答案 7 :(得分:2)

Microsoft过去常常提供脚本编码器来编码您的JavaScript(以及ASP和VBScript等),但编码后的脚本只能在Internet Explorer中运行,所以这是一个很大的禁忌({{3} })

如今只有混淆是一种选择。但是你可以使用像link这样的工具打破任何混淆,这样你就不走运了。你可以最小化,你可以混淆,但你真的无法隐藏你在做什么。

最好的最小化器/混淆器可能是Online JavaScript Beautifier - 它非常先进,可能会将您的代码变成一些非常难以理解的东西。

答案 8 :(得分:1)

您要找的是混淆,而不是加密。 JSMinYUI Compressor之类的工具会让您的代码变得非常难以理解,以至于没有人想要尝试理解它。但是,没有办法来制作它,以便有人无法将其复制并粘贴到自己的网站上并在那里运行。老实说,我不担心,因为你在浪费时间来保护那些无法保护的东西。如果可能的话,尝试将所有“重要”逻辑放在服务器端,因为这是实现它的唯一万无一失的方法。如果浏览器可以访问它,那么其他任何人都可以访问它。

答案 9 :(得分:0)

我认为您不想要加密,除非您要编写可以解密javascript的浏览器扩展程序。

我喜欢GWT,甚至jsmin可以充分压缩/混淆你的javascript以供正常使用。

如果您想将某些客户端代码绑定到您的站点,您可能需要考虑某种随机握手,这种握手依赖于服务器端方法来“验证”javascript。我甚至不知道这是否可行。

答案 10 :(得分:0)

这正是DRM:你给用户一个锁,也是它的关键,并期望能够说出他们可以用它做什么。

理论上讲是不可能的:如果他们的计算机可以执行代码,那么它必须在那里解密。

这几乎是不可能的:看看每个人在Linux机上观看DVD,看看你有多成功。

答案 11 :(得分:0)

使用此工具:Javascript Obfuscator  https://javascriptobfuscator.com/Javascript-Obfuscator.aspx

答案 12 :(得分:0)

截至 2021 年最成熟的 Javascript 混淆器here,可通过 npm 获得。

对于许多声称不需要/不应该进行 javascript 混淆或不是一种好的做法的人来说,他们并没有真正了解此 repo 上的星星数量所反映的主题的市场动态。

obfuscator.io 是一个很好的用户界面,可以轻松使用它

对于许多声称不需要/不应该进行 javascript 混淆或不是一种好的做法的人来说,他们并没有真正了解此 repo 上的星星数量所反映的主题的市场动态。

相关问题