一张图片能隐含千言万语之隐藏你的程序代码


Posted in HTML / CSS onDecember 13, 2012

我最近开发了我的第一个网页游戏:一个HTML5的视频智力游戏。开发的过程很有趣,我喜欢编程,但当实现了游戏逻辑后,我有了一个有趣的想法:为什么不想个办法把代码隐藏起来?起初我想到的是一些很简单的做法,比如禁止上下文菜单,以防右键点击时可以查看页面源代码。但这毫无意义,右键菜单不能用,人们仍然可以通过键盘快捷键或菜单栏里的“查看源文件”来观看源代码。

一张图片能隐含千言万语

这依赖于图片的体积。但我决定要把源代码加密存放到一张图片里。HTML5的画布(canvas)组件很适合干这种事情,因为它支持针对图像像素的操作。一个像素由四个值(通道)来表示:红,绿,蓝和alpha通道。它们的值的分布范围是从0到255。我的Javascript代码就是一个个的字符,每个字符都有一个ASCII对应值。ASCII值的范围也是0-255,所以,我想做的是,遍历画布上的每个像素,给每个像素设置3个代码字符的ASCII值作为它的RGB值,你可以通过charCodeAt函数轻松的取出这些字符。

复制代码
代码如下:

.charCodeAt(0)

生成的是一张色彩斑斓、很小的图片,它就是我的程序代码看看吧:

解码的时候,我只需要把这个图片画到画布上,遍历像素点,取出r,g,b值所代表的字符:

复制代码
代码如下:

String.fromCharCode(code)

把它们连接成一个大的字符串,这就是你的代码了——可执行的代码。

这样就能保护你的源代码了吗?

其实不能——一个有经验的(甚至没有经验的)程序员仍然能够知道如何去解码图片,取出里面的代码,但我想这是能防止那些怀着不良商业目的人偷盗你的的代码的第一步措施——而那些能够想出如何解码的程序员(大部分)都不是来剽窃的

这种方法的主要缺陷
这种技术只能应用在支持HTML5画布(canvas)技术的现代浏览器里,IE6、IE8 里肯定是不行的。甚至有些现代的浏览器对于图片的alpha通道的编码也有支持问题,所以,每个像素点你只能放3个字符——一个100×100大小的图片可以存放3万个文本字符。

你还有其它简单的能防止别人拷贝你的代码的方法吗?我们当然可以把字符进行加密,但如何保证你的解密步骤能不被人轻易的破解呢?告诉我你的想法吧!

HTML / CSS 相关文章推荐
CSS3教程(1):什么是CSS3
Apr 02 HTML / CSS
玩转CSS3色彩
Jan 16 HTML / CSS
css3发光搜索表单分享
Apr 11 HTML / CSS
详解CSS3的perspective属性设置3D变换距离的方法
May 23 HTML / CSS
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
Dec 29 HTML / CSS
canvas绘制表情包的示例代码
Jul 09 HTML / CSS
分享一个H5原生form表单的checkbox特效代码
Feb 26 HTML / CSS
HTML5梦幻之旅——炫丽的流星雨效果实现过程
Aug 06 HTML / CSS
用HTML5 实现橡皮擦的涂抹效果的教程
May 11 HTML / CSS
浅谈html5增强的页面元素
Jun 14 HTML / CSS
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
Apr 19 HTML / CSS
VW、VH适配移动端的解决方案与常见问题
May 21 HTML / CSS
HTML5 新旧语法标记对我们有什么好处
Dec 13 #HTML / CSS
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
Dec 13 #HTML / CSS
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
Dec 09 #HTML / CSS
HTML5 Web Database 数据库的SQL语句的使用方法
Dec 09 #HTML / CSS
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
Dec 07 #HTML / CSS
html5-websocket基于远程方法调用的数据交互实现
Dec 04 #HTML / CSS
HTML5 Canvas像素处理使用接口介绍
Dec 02 #HTML / CSS
You might like
用函数读出数据表内容放入二维数组
2006/10/09 PHP
在IIS上安装PHP4.0正式版
2006/10/09 PHP
php xml-rpc远程调用
2008/12/19 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
php简单获取目录列表的方法
2015/03/24 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
jQuery之尺寸调整组件的深入解析
2013/06/19 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
初探nodeJS
2017/01/24 NodeJs
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
js实现微信聊天界面
2020/08/09 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
Python实现统计代码行的方法分析
2017/07/12 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
python采集微信公众号文章
2018/12/20 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
selenium自动化测试入门实战
2020/12/21 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
HTML5标签使用方法详解
2015/11/27 HTML / CSS
购买澳大利亚最好的服装和内衣在线:BONDS
2016/10/14 全球购物
简历自我评价怎么写好呢?
2014/01/04 职场文书
公务员培训自我鉴定
2014/02/01 职场文书
党建工作先进材料
2014/05/02 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
Python中递归以及递归遍历目录详解
2021/10/24 Python