Base64 加密后运行 JavaScript 代码
Posted
技术标签:
【中文标题】Base64 加密后运行 JavaScript 代码【英文标题】:Run JavaScript Code after Base64 encryption 【发布时间】:2013-03-28 20:38:36 【问题描述】:我已经使用 base64 方法加密了我的 javascript 代码,如 here 所示。但是当我使用 document.ready 运行编码函数时,JavaScript 函数并没有做它应该做的事情。
如何实现,加密后的代码将被解密并开始运行函数?
提前感谢您! :)
【问题讨论】:
这取决于您的代码。另请注意,Base64 不是加密。你为什么要这样做? 您好,感谢您的快速回复。我这样做是因为我想保护我的 JavaScript 代码不受其他人的影响。我知道,没有办法保护它免受每个人的侵害,但我希望它受到保护,免受初学者的侵害。对不起我的英语不好:) 所以你想“保护”你的代码免受那些可能对 JS 一无所知的人的攻击......老实说,不要这样做,以免麻烦。 加密为 base64 字符串对于可共享性或当您想要创建书签时非常有意义(代码从网络地址栏javascript:eval(atob('...'))
运行,但请记住,它不提供任何安全性。
【参考方案1】:
只需在解码后的字符串上使用eval
。
使用代码alert("test");
的示例:
eval(decode64('YWxlcnQlMjglMjJ0ZXN0JTIyJTI5JTNC'));
演示:http://jsfiddle.net/uFxnz/
注意:使用eval
函数与不安全和低效的代码相关联,但在这种情况下,您可以尽可能多地控制代码的来源,因此它会按照您的意愿行事。
【讨论】:
@Qwerty:这不是内置函数。使用 OP 链接到的代码。 对.. 但它确实做了内置函数btoa()
和 atob()
对吗?
@Qwerty:是的,但并非所有浏览器都提供这些功能。 IE 直到版本 10 才拥有它们。【参考方案2】:
要“保护”您的代码...
..您可以使用以下简单程序。
但是,请记住,它不提供任何安全性。但这并不意味着没有用例。加密为 base64 字符串对于可共享性或当您想要创建时非常有意义,例如书签(代码从网络地址栏运行 javascript:eval(atob('...'))
。
现在,假设这是您的代码:
1。守则
// commentary, Yaaay!
var myObj =
foo : function() alert("Baz!") ,
html : "<div id='myDIV'></div>", // it's ["'] proof
bar : 123
;
myObj.foo();
2。 base64 字符串
1. var base64Fun = btoa((function()
2. // commentary, Yaaay!
3. var myObj =
4. foo : function() alert("Baz!") ,
5. html : "<div id='myDIV'></div>", // it's ["'] proof
6. bar : 123
7. ;
8. myObj.foo();
9. ).toString().slice(13,-2))
请注意,我只添加了1
和9
行,其余的是您的代码,完好无损。
3。运行它
eval(atob(base64Fun));
eval(atob("Ly8gY29tbWVudGFyeQp2YXIgbXlPYmogPSB7Cglmb28gOiBmdW5jdGlvbigpIHsgYWxlcnQoIkJheiEiKX0gLAoJaHRtbCA6ICI8ZGl2IGlkPSdteURJVic+PC9kaXY+IiwKCWJhciA6IDEyMyAKfTsKbXlPYmouZm9vKCk7"));
兼容性
并非所有浏览器都支持btoa()
和atob()
,但是..
-
使用 polyfil 并教给浏览器这些功能。 link
另辟蹊径
【讨论】:
【参考方案3】:您不能通过 base64 转换器运行您的 JS 代码并期望它正常工作。
您正在寻找的是一个缩小器。喜欢 uglifyjs:
http://marijnhaverbeke.nl/uglifyjs
【讨论】:
以上是关于Base64 加密后运行 JavaScript 代码的主要内容,如果未能解决你的问题,请参考以下文章
javascript是否自带了base64加密、解密函数?是啥?