我想将我的一款游戏移植到WebGL,但它使用了我从第三方授权的声音和图像。让它直接从web服务器中提取未受保护的文件将违反许可证。
以前,我通过以自己的文件格式嵌入一堆这样的文件来解决这个问题,但我不确定我是否可以从文件中读取X字节,然后将其传递给Javascript,并说"嘿,这是一个png图像。"这可能吗?有其他保护文件的好方法吗?
如果这些东西必须最终出现在用户的浏览器中,那么,好吧,它就出现在用户浏览器中。除了混淆之外,你无法保护它,如果你保护的东西有实际价值,那完全是浪费时间。(这样想吧:如果它真的很有价值,意味着如果有人非法获得它,你会遭受相当大的损失,而小偷会获得相当大的收益,那么克服混淆所需的微小努力对小偷来说显然是值得的。)
如果你想保护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方法访问。
这加上阻止右键单击"另存为…"应该会让你更接近你想要的位置。
您无法保护javascript中的内容,因为它在客户端执行,您为混淆或"保护"文件所做的任何操作都可以由愿意这样做的用户撤消。
这就完成了任务:
var i = new Image();
i.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAABJJREFUeJxj+N/wHw9iGJXGhgDu6Pk5cOz+IwAAABF0RVh0Q29tbWVudAB0RVhUIHRleHTAVE3RAAAAAElFTkSuQmCC';
然后,如果你把绳子埋在一个不显眼的地方,然后把它弄乱,它应该会挡住低挂的水果。
您的许可证是否允许您在web服务器上以加密形式存储资源?如果这不是一个选项,那么你可能不得不使用一些可以封装媒体的东西——Java Applets。