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


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实现鼠标悬停提示气泡效果
Feb 28 HTML / CSS
利用css3径向渐变做一张优惠券的示例
Mar 22 HTML / CSS
详解HTML5 canvas绘图基本使用方法
Jan 29 HTML / CSS
HTML5 本地存储和内容按需加载的思路和方法
Apr 07 HTML / CSS
浅析HTML5的WebSocket与服务器推送事件
Feb 19 HTML / CSS
HTML5 LocalStorage 本地存储刷新值还在
Mar 10 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
Aug 24 HTML / CSS
浅谈HTML5 Web Worker的使用
Jan 05 HTML / CSS
移动端html5模拟长按事件的实现方法
Sep 30 HTML / CSS
五分钟学会HTML5的WebSocket协议
Nov 22 HTML / CSS
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
May 26 HTML / CSS
HTML5 video进入全屏和退出全屏的实现方法
Jul 28 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
通过PHP修改Linux或Unix口令的方法分享
2012/01/30 PHP
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
PHP原生函数一定好吗?
2014/12/08 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
JavaScript Base64 作为文件上传的实例代码解析
2017/02/14 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
Python使用Flask框架获取当前查询参数的方法
2015/03/21 Python
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
Python的randrange()方法使用教程
2015/05/15 Python
Python作用域用法实例详解
2016/03/15 Python
python查看微信好友是否删除自己
2016/12/19 Python
对python:threading.Thread类的使用方法详解
2019/01/31 Python
python绘制已知点的坐标的直线实例
2019/07/04 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
英国Boots旗下太阳镜网站:Boots Designer Sunglasses
2018/07/07 全球购物
方法名是否可以与构造器的名字相同
2012/06/04 面试题
学前教育毕业生自荐信
2013/10/29 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
优秀毕业生就业推荐信
2014/05/22 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
财务经理岗位职责
2015/01/31 职场文书
法定授权委托证明书
2015/06/18 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书