2011-05-26 65 views
3

我想将我的游戏中的一个移植到WebGL,但它使用我从第三方获得许可的声音和图像。如果只是将不受保护的文件直接从Web服务器上取出,将违反许可证。用Javascript保护内容

之前,我通过以我自己的文件格式嵌入一堆这些文件来解决这个问题,但我不确定是否可以从文件中读取X个字节,然后将其传递给Javascript并说“嘿,这是一个PNG图像。”那可能吗?有没有其他好的方法来保护文件?

+0

所以许可证要求..什么?您是否将内容直接嵌入到已编译的可执行文件中?如果是这样,不管你做什么,Javascript可能会违反... ... – 2011-05-26 16:24:42

+0

许可证只是要求文件不在公开的地方,有人可以很容易地找到它们(通过检查目录或类似的东西那)。 – Chris 2011-05-26 16:35:32

+2

网络的本质意味着有人能够轻松地找到他们。 – 2011-05-26 16:39:18

回答

0

该做的伎俩:

var i = new Image(); 
i.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAABJJREFUeJxj+N/wHw9iGJXGhgDu6Pk5cOz+IwAAABF0RVh0Q29tbWVudAB0RVhUIHRleHTAVE3RAAAAAElFTkSuQmCC'; 

然后,如果你嵌入该字符串的地方模糊不清,争夺它,它应该保持远离唾手可得。

+0

克里斯你可以修改这个,并提供更多的信息?我对此非常感兴趣。我认为这正是我正在寻找的。我在哪里可以找到更多信息? – Ben 2013-04-29 20:37:04

3

如果这些东西必须在用户的浏览器中结束,那么它就存在于用户的浏览器中。除了通过混淆之外,你无法保护它,如果你保护的东西具有实际价值,那么这是完全浪费时间。 (想想这样说:如果它是你会遭受一些损失相当大,如果有人知道了非法真正有价值的东西—意义,小偷将获得可观的收益—则需要克服混淆了未成年人的努力显然是值得的小偷)。

+2

对。您在浏览器中看到,听到或闻到的所有内容都已传递给浏览器,因此也已传递给用户。 – Hyperboreus 2011-05-26 16:26:40

-2

您的许可证是否允许您以加密形式将资源存储在Web服务器上?如果这不是一种选择,那么你可能不得不使用一些可以封装媒体的东西 - Java小程序。

+1

如果用户可以将小程序拖入浏览器,则用户可以保存该小程序并将其拆开。 – Pointy 2011-05-26 16:28:12

+0

你可以告诉Javascript解密一个图像文件下载后? (即类似“var img = new EncryptedImage(url,key)”) – Chris 2011-05-26 16:39:16

+0

@Chris:恐怕你会走下一条盲巷。所有这些混淆都将不可避免地失败。在处理网页内容时,放弃“保护”它的所有希望。 – 2011-05-26 17:08:20

0

您不能保护的东西在JavaScript中,因为它在客户端和任何你做混淆或“保护”执行文件,可以通过足够的愿意这样做的用户撤消。

1

如果你想保护的内容在您的JS文件,你需要创建一个持久的JS对象,通过定义一个对象,它是一个函数调用的结果。

这样的事情...

var imageContainer = function(protectedImageContainer) { 
     var that = {}; 
     that.getImage = function() { 
       // bytes -> image transform would happen here. 
       return protectedImageContainer.data; 
     }; 
     return that; 
}; 

在这个例子中,protectedImageContainer.data保护和防篡改,只能通过你的getImage方法访问。

这与阻止右键单击“另存为...”应该让你更接近你想要的位置。

+0

在“//字节 - >图像”部分是创建一个新的Image()对象并自己定义其像素数据的想法,而不是像new Image(“path/to/img.png”)那样做? – Chris 2011-05-26 17:00:18